对于列中最常见的单元格,如MAX的聚合函数?

时间:2016-04-04 20:00:32

标签: sql tsql sql-server-2012

按列中最高的数字分组与MAX()一致,但如果我想获得最常见的单元格,该怎么办。

例如:

ID
100
250
250
300
200
250

所以我想按ID进行分组,而不是获得最低(MIN)或最高(MAX)数字,我想得到最常见的一个(250,因为有3x)

在SQL Server 2012中是否有一种简单的方法,或者我被迫在SELECT处添加第二个COUNT(DISTINCT ID),并以某种方式将其添加到我的第一个SELECT语句中?

2 个答案:

答案 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)

执行所需操作的简单方法是使用toporder 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;