如何调整查询以在分组和排序时显示前 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;
我有一个正在尝试 运行 的查询,它计算 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;