【发布时间】:2019-05-14 21:18:23
【问题描述】:
我有一个带有某个分组依据的计数的查询,我想获得更大的计数。我可以使用 order by 和 limit 1,但是我有多个结果具有相同的计数,然后对我不起作用。
我该如何解决这个问题?
【问题讨论】:
-
你的MySql是什么版本的?
-
5.6.但我也想知道H2数据库。
-
请提供您的查询示例。
我有一个带有某个分组依据的计数的查询,我想获得更大的计数。我可以使用 order by 和 limit 1,但是我有多个结果具有相同的计数,然后对我不起作用。
我该如何解决这个问题?
【问题讨论】:
使用MySql 8+,可以使用CTE获取最大计数,然后检索计数等于最大计数的所有记录。
但是,由于 CTE 在 MySql 5.6 中不可用,您需要使用子查询来获取最大计数,然后编写将每条记录的计数与检索到的最大计数进行比较的主查询子查询。
这是我写的一个查询。也许这不是最有效的解决方案,但它得到了想要的结果。
SELECT
group_id, COUNT(record_id) c
FROM
table_name
GROUP BY group_id
HAVING c IN (
SELECT
MAX(sub_query.c)
FROM
(SELECT
group_id, COUNT(record_id) c
FROM
table_name
GROUP BY group_id) AS sub_query
)
【讨论】:
如果您不打算使用窗口函数执行此操作,您可以这样做:
SELECT group_id, COUNT(*) as cnt
FROM table_name
GROUP BY group_id
HAVING cnt = (SELECT COUNT(*)
FROM table_name
GROUP BY group_id
ORDER BY COUNT(*) DESC
LIMIT 1
) ;
【讨论】: