我如何只显示最高值,即使有一个平局,所以像有什么办法来使用MAX COUNT使用sqlLite
SELECT GAMEID,
COUNT(GAMEID)
FROM GAMES
GROUP BY GAMEID
ORDER BY COUNT(GAMEID) DESC
如果你期望有多条相同计数的行,你可以使用窗口函数来做这件事,并处理这些联系。
你没有指定你的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
由于听起来你使用的是过时的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);
你可以在查询的结尾加上 "LIMIT 1",这样就只会显示一个结果。但是,如果2个条目有相同的结果,就会任意显示哪个。
如果你不关心并列关系,那么只需使用 "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;