mysql - 获取表中出现次数最多的值

标签 mysql count

我得到了下表

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

  1. 如果 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/

相关文章:

mysql - 统计今天、昨天……以及其他时间添加的行数

php - 添加/删除/更新数据库元素不起作用 (Dreamweaver + phpMyAdmin)

mysql - SQL如何根据组中现有列的计数为新列创建值?

javascript - 我怎样才能内爆每一行并显示在 table 上?

php - 如何在mysql中减去2个查询?

matlab - 计算并显示出现的总和

sql-server-2008 - 按日期分组的 SQL 运行总计

c++ - 显示正面和反面被抛出的时间 C++

php - Yii2 事件记录中按查询等效的 MySQL 复杂顺序

mysql - 我没有按照 DESC 顺序正确获取 row_num()