如何调整查询以在分组和排序时显示前 5 个

How to Adjust Query to Show Top 5 When Grouped and Ordered

我有一个正在尝试 运行 的查询,它计算 part_number 的重复次数,将其分组并显示输出。

我只想按降序显示前 5 个条目(行)。

这是我的代码供参考。

SELECT TOP 5 
part_log.part_number,
COUNT(part_log.part_number) AS CountOfpart_number
FROM part_log
GROUP BY part_log.part_number
ORDER BY Count(part_log.part_number) DESC;

问题是,例如,如果我有 8 个零件号,它们的值各不相同,但第 5 行的值与第 6、7 和 8 行的值相同,那么它会吐出下面的数据,而不是只是在第 5 行把它剪掉。

p/n: 5 occ:10
p/n: 6 occ:7
p/n: 2 occ:5
p/n: 3 occ:4
p/n: 1 occ:2
p/n: 4 occ:2
p/n: 7 occ:2
p/n: 8 occ:2

我没有偏好从具有相同值的部件号中吐出哪个部件号,我只想检索 5 行。

删除 ORDER BY 函数只给我 5 行,但省略了我需要的降序值。

如有任何帮助,我们将不胜感激。

ORDER BY 子句添加第二个条件如何?

ORDER BY Count(part_log.part_number) DESC, part_log.part_number;

由于您按 part_number 分组,因此结果集中的值保证是唯一的,这使得该列成为打破平局的完美候选者。

MS Access 将 TOP 视为 TOP WITH TIES。也就是说,当有联系时,它会继续 return 相等的值。

简单的解决方案是添加一个额外的密钥。在这种情况下,要添加的明显键是 GROUP BY 键——因为您知道它在每一行上都是唯一的:

SELECT TOP 5 pl.part_number,
       COUNT(*) AS CountOfpart_number
FROM part_log as pl
GROUP BY pl.part_number
ORDER BY Count(*) DESC, pl.part_number;