首页 > 解决方案 > 如何找到最常重复的列?

问题描述

ID  UserID LevelID
1   1       1
2   1       2
3   1       2
4   1       2
5   2       1
6   2       3
7   3       2
8   4       1
9   4       1

查询应返回: LevelID: 1(3 次) - 不同用户 (UserID) 最常重复的 LevelID 列。

我有以下查询:

SELECT LevelID, COUNT(LevelID) AS 'Occurrence' 
FROM 
(
  SELECT DISTINCT * FROM
  (
    SELECT UserID, LevelID
    FROM SampleTable
  ) cv
) levels
GROUP BY LevelID
ORDER BY 'Occurrence'  DESC

返回:

LevelID Occurence
1        3      
2        2      
3        1  

但它不允许我LIMIT 1;在底部添加以检索选择的第一行。查询有什么问题?

标签: sqlsql-servercountsql-order-bysql-limit

解决方案


不需要这几层嵌套。考虑使用聚合,count(distinct ...)对结果进行排序并使用行限制子句仅保留顶部记录:

select top(1) levelID, count(distinct userID) cnt
from mytable
group by levelID
order by cnt desc

如果您想允许可能的顶部关系,请使用top (1) with ties而不是仅使用top (1).


推荐阅读