只显示最常出现的数字 SQL

问题描述 投票:0回答:1

我如何只显示最高值,即使有一个平局,所以像有什么办法来使用MAX COUNT使用sqlLite

    SELECT GAMEID,
       COUNT(GAMEID) 

  FROM GAMES
 GROUP BY GAMEID
 ORDER BY COUNT(GAMEID) DESC
sql greatest-n-per-group
1个回答
0
投票

如果你期望有多条相同计数的行,你可以使用窗口函数来做这件事,并处理这些联系。

你没有指定你的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    

在线示例


0
投票

由于听起来你使用的是过时的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);

-1
投票

你可以在查询的结尾加上 "LIMIT 1",这样就只会显示一个结果。但是,如果2个条目有相同的结果,就会任意显示哪个。


-1
投票

如果你不关心并列关系,那么只需使用 "LIMIT 1 "就可以了。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;
© www.soinside.com 2019 - 2024. All rights reserved.