【发布时间】:2020-09-09 03:29:43
【问题描述】:
如何只显示最高值? 即使有领带 所以无论如何都可以使用 MAX COUNT 使用 sqlLite
SELECT GAMEID,
COUNT(GAMEID)
FROM GAMES
GROUP BY GAMEID
ORDER BY COUNT(GAMEID) DESC
【问题讨论】:
标签: sql sqlite greatest-n-per-group
如何只显示最高值? 即使有领带 所以无论如何都可以使用 MAX COUNT 使用 sqlLite
SELECT GAMEID,
COUNT(GAMEID)
FROM GAMES
GROUP BY GAMEID
ORDER BY COUNT(GAMEID) DESC
【问题讨论】:
标签: sql sqlite greatest-n-per-group
如果您希望多行具有相同的计数,您可以使用窗口函数来执行此操作并处理平局。
您没有指定您的 DBMS 产品,但以下是 100% ANSI 标准 SQL:
SELECT *
FROM (
SELECT gameid,
count(*),
dense_rank() over (order by count(*) desc) as rnk
FROM games
GROUP BY gameid
) t
WHERE rnk = 1
【讨论】:
您可以在查询末尾添加“LIMIT 1”,它只会显示一个结果。但是,如果 2 个条目具有相同的结果,则显示哪一个是任意的。
【讨论】:
如果你不关心领带,那就用LIMIT:
SELECT GAMEID, COUNT(GAMEID) AS CNT
FROM GAMES
GROUP BY GAMEID
ORDER BY COUNT(GAMEID) DESC
LIMIT 1;
如果您想找到计数最高的游戏,包括可能的平局,那么RANK 分析函数在这里提供了一种选择:
WITH cte AS (
SELECT GAMEID, COUNT(GAMEID) AS CNT, RANK() OVER (ORDER BY COUNT(GAMEID) DESC) rnk
FROM GAMES
GROUP BY GAMEID
)
SELECT GAMEID, CNT
FROM cte
WHERE rnk = 1;
【讨论】:
因为听起来您使用的是过时的 sqlite 版本并且不能使用窗口函数,所以这里有另一种处理关系的方法:
WITH counted AS (SELECT gameid, count(gameid) AS count FROM games GROUP BY gameid)
SELECT gameid, count
FROM counted
WHERE count = (SELECT max(count) FROM counted);
【讨论】: