我得到了下表
1. user
+----+-------------------+
| id | email |
+----+-------------------+
| 2 | user1@example.com |
| 3 | user2@example.com |
| 1 | user3@example.com |
+----+-------------------+
2. answer
+----+---------+-------------+-----------+---------------------+
| id | user_id | question_id | option_id | created |
+----+---------+-------------+-----------+---------------------+
| 1 | 2 | 1 | 5 | 2015-12-19 15:15:07 |
| 2 | 2 | 1 | 5 | 2015-12-19 15:16:05 |
| 3 | 2 | 2 | 3 | 2015-12-19 15:16:06 |
| 4 | 2 | 3 | 3 | 2015-12-19 15:16:08 |
| 5 | 2 | 1 | 1 | 2015-12-19 15:32:46 |
| 6 | 2 | 1 | 4 | 2015-12-19 15:39:22 |
| 7 | 2 | 1 | 2 | 2015-12-19 15:39:23 |
| 8 | 2 | 1 | 2 | 2015-12-19 15:40:38 |
| 9 | 2 | 1 | 1 | 2015-12-19 15:41:25 |
+----+---------+-------------+-----------+---------------------+
我想获取按以下条件按用户分组的大多数出现的 option_id
- 如果 option_id 有两次或更多次最大出现次数,则获取最后一条记录。
引用上面的答案表,如您所见,option_id
最多出现四次,在这种情况下,我希望返回列表中的最后一个,即 option_id 1
这是我用来实现我想要的查询
SELECT
option_id,
COUNT(option_id) as occurence
FROM
answer
GROUP BY
option_id
ORDER BY
occurence DESC LIMIT 1;
这有效,但是当我添加 WHERE 条件时,它会给我 option_id 5,而我期望 option_id 1
SELECT
option_id,
COUNT(option_id) as occurence
FROM
answer
WHERE
user_id = 2
GROUP BY
option_id
ORDER BY
occurence DESC LIMIT 1;
我在这里错过了什么?
注意:这是此 link 的后续问题,我在这里重新发布的原因是发布同一问题的简化版本。
最佳答案
我在我的 table 上做了类似的事情,这就是我的解决方案:
SELECT option_id
FROM answer
WHERE id = (SELECT id
FROM answer
WHERE user_id = 2
GROUP BY option_id
ORDER BY COUNT(option_id) DESC, id DESC
LIMIT 1)
或者看看如果您在查询中执行 ORDER BY occurence DESC, id DESC
会发生什么。
关于mysql - 获取表中出现次数最多的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34371292/