mysql - 名人堂的平局(团体球员,当月是最高级别,然后是每场比赛的最高得分......)
问题描述
需要列出一个名人堂的最佳球员,该数据库包含不同游戏中的每个玩家。
级别有优先级,如果级别相同,则检查最高分。
我有一个包含 user_id、级别、分数、游戏和数据的数据库。这里的架构:
CREATE TABLE IF NOT EXISTS `docs` (`user_id` int(6) unsigned NOT NULL,
`level` int(3) unsigned NOT NULL,`game` varchar(30) NOT NULL,
`score` int(5) unsigned NOT NULL,
`data` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`user_id`, `level`, `game`, `score`,`data`) VALUES
('1', '7', 'pacman', '8452','2018-02-14 15:00:00'),
('1', '9', 'pacman', '9999','2018-02-10 16:30:00'),
('2', '8', 'pacman', '8500','2018-02-24 17:30:00'),
('1', '10', 'pacman', '9100','2018-02-15 18:30:00'),
('1', '10', 'pacman', '8800','2018-02-15 18:11:00'),
('1', '11', 'snake', '9600','2018-02-14 15:00:00'),
('1', '6', 'snake', '7020','2018-02-11 11:30:00'),
('2', '8', 'snake', '8500','2018-02-24 14:00:00'),
('2', '12', 'snake', '9200','2018-02-25 19:00:00'),
('2', '12', 'snake', '9800','2018-02-25 19:20:00'),
('1', '4', 'pacman', '2452','2018-03-11 15:00:00'),
('1', '6', 'pacman', '4999','2018-03-07 16:30:00'),
('2', '7', 'pacman', '5500','2018-03-02 17:30:00'),
('1', '7', 'pacman', '5100','2018-03-01 18:30:00'),
('1', '3', 'snake', '3600','2018-03-03 15:00:00'),
('1', '5', 'snake', '4220','2018-03-01 11:30:00'),
('2', '5', 'snake', '3900','2018-03-04 14:00:00'),
('2', '5', 'snake', '5200','2018-03-05 19:00:00');
我想检索选定月份和游戏的名人堂,例如,如果我在三月选择吃豆人,结果应该是:
user level score
2 7 5500
1 7 5100
我在其他类似主题中尝试了这个建议
select d1.*
from docs d1
left outer join docs d2
on (d1.user_id = d2.user_id and d1.level < d2.level)
where d2.user_id is null
order by level desc;
但是我为同一用户重复了关卡,然后我无法选择游戏或月份。
这里有SQL Fiddle
解决方案
SELECT x.* FROM docs x
JOIN
(select user_id
, game
, MONTH(data) month
, MAX(score) score
from docs
where game = 'pacman'
and MONTH(data) = 3
group
by user_id
, game
, MONTH(data)
) y
ON y.user_id = x.user_id
AND y.game = x.game
AND y.month = MONTH(x.data)
AND y.score = x.score;
或类似的东西
推荐阅读
- lua - 如何修改由 C API 创建的元表?
- amazon-web-services - 禁用 AWS Api Gateway http --> https 307 重定向
- c# - 如何让 c# 从网站获取所有 URL 并将它们放入列表中
- php - 在单个函数中如何在 CodeIgniter 中执行两个重定向方法?
- firebase - 现在将服务器值设置为时间戳
- swift - 当应用程序最小化时,UILabel.text 不起作用,手机被锁定并且应用程序从 callkit 使用密码打开(没有密码可以正常工作)
- parse-platform - 为什么我有时会得到嵌入的属性,有时却没有?
- node.js - 如何在 AWS X-Ray 管理控制台中打印自定义子分段?
- json - PostgreSQL 将 JSON 对象作为键值对返回
- python - 参数必须是字符串、类似字节的对象或数字,而不是“切片”