sql - 如何找到最常重复的列?
问题描述
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;
在底部添加以检索选择的第一行。查询有什么问题?
解决方案
不需要这几层嵌套。考虑使用聚合,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)
.
推荐阅读
- git - Git 用于没有 .git 的单个文件
- python - 为什么 python 控制台没有选择 pyenv 全局版本?
- javascript - Javascript 文本搜索和替换不适用于书签
- laravel - Laravel 无法更改配置值
- heroku - 阻止 Heroku Dyno 骑自行车
- java - 如何从 Enterprise Architect 生成 Java Eclipse 项目的序列图
- html - 我无法在 html 中自动下载此链接
- java - 如何在 java swing 计算器中获得百分比结果
- vba - 在范围内使用动态行和列
- javascript - 存储 MongoDB 结果(承诺待定)