如何解决在 SQL MS Access 中添加 Max(Count(column))
我有以下示例数据集,如您所见,X 列是班级 ID,Y 列是每个班级名称,最后 Z 列是用于每个学科的其他大学班级 ID。目标是得到 X 和 Z 并按 X 分组,并得到 Z(其他大学)最常用的 ID。
工作表 1:
X | Y | Z |
---|---|---|
123 | 22 | 122 |
123 | 22 | 123 |
123 | 22 | 122 |
256 | 21 | 256 |
256 | 21 | 255 |
341 | 33 | 400 |
341 | 33 | 400 |
结果应该是:
X | Z |
---|---|
123 | 122 |
256 | 255 |
341 | 400 |
我尝试添加以下查询,但它只返回所有表中的最大值,而不仅仅是 Z 列中的每个值。
SELECT Sheet1.X,Sheet1.Z
FROM Sheet1
GROUP BY Sheet1.X,Sheet1.Z
HAVING COUNT(Sheet1.Z) =
(SELECT MAX(sheet2.count) FROM
(SELECT Sheet1.X,Sheet1.Z,COUNT(Sheet1.Z) AS count
FROM Sheet1
GROUP BY Sheet1.X,Sheet1.Z) as sheet2);
对我做错了什么有什么建议吗?
解决方法
这对于 MS Access 来说是一个真正的痛点。但是,如果您希望每个 X
一行,那么您可以这样做:
SELECT s1.X,s1.Z
FROM Sheet1 as s1
GROUP BY s1.X,s1.Z
HAVING s1.Z = (SELECT TOP (1) s2.Z
FROM Sheet1 as s2
WHERE s2.X = s1.X
GROUP BY s2.Z
ORDER BY COUNT(*) DESC,s2.Z
);
如果你想在平局的情况下多行,那么使用:
SELECT s1.X,s1.Z
HAVING COUNT(*) IN (SELECT TOP (1) COUNT(*)
FROM Sheet1 as s2
WHERE s2.X = s1.X
GROUP BY s2.Z
);
我应该注意到,这在几乎任何其他数据库中都会更简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。