我有一个logins
具有以下架构的表:
| id | user_id | weekday |
|----|---------|---------|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
...
工作日是一个从 0 到 6 的数字。
我想为表中的weekday
每个获得最高计数user_id
。
我尝试了以下查询:
SELECT MAX(num) as max_num, user_id, weekday
FROM (
SELECT COUNT(*) as num, user_id, weekday
FROM logins
GROUP BY user_id, weekday
) C
WHERE user_id = C.user_id AND num = C.num
GROUP BY user_id;
这让我weekday = 1
而不是2
. 我认为我不应该WHERE
在这里使用子句,但我无法得到正确的结果。
我已经检查了其他类似的问题,但没有运气,例如:
我用我的例子创建了一个 SQL Fiddle:http ://sqlfiddle.com/#!9/e43a71/1
这是一个方法:
SELECT user_id, MAX(num) as max_num,
SUBSTRING_INDEX(GROUP_CONCAT(weekday ORDER BY num DESC), ',', 1) as weekday_max
FROM (SELECT user_id, weekday, COUNT(*) as num
FROM logins l
GROUP BY user_id, weekday
) uw
GROUP BY user_id;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句