按列中最高的数字分组与MAX()
一致,但如果我想获得最常见的单元格,该怎么办。
例如:
ID
100
250
250
300
200
250
所以我想按ID进行分组,而不是获得最低(MIN)或最高(MAX)数字,我想得到最常见的一个(250
,因为有3x)
在SQL Server 2012中是否有一种简单的方法,或者我被迫在SELECT
处添加第二个COUNT(DISTINCT ID)
,并以某种方式将其添加到我的第一个SELECT
语句中?
答案 0 :(得分:2)
您可以使用dense_rank
返回所有具有最高计数的ID。这将处理最高计数关系的情况。
select id from
(select id, dense_rank() over(order by count(*) desc) as rnk from tablename group by id) t
where rnk = 1
答案 1 :(得分:1)
执行所需操作的简单方法是使用top
和order by
:
SELECT top 1 id
FROM t
GROUP BY id
ORDER BY COUNT(*) DESC;
这是一个名为mode
的统计信息。在SQL Server中获取模式和最大值有点挑战性。我会这样做:
WITH cte AS (
SELECT t.id, COUNT(*) AS cnt,
row_number() OVER (ORDER BY COUNT(*) DESC) AS seqnum
FROM t
GROUP BY id
)
SELECT MAX(id) AS themax, MAX(CASE WHEN seqnum = 1 THEN id END) AS MODE
FROM cte;