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

问题描述 投票:0回答:2

我正在尝试运行一个查询,该查询对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行,但忽略了我需要的降序值。

对此的任何帮助将不胜感激。

sql ms-access-2013
2个回答
0
投票

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

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

由于您要按part_number分组,因此保证值在结果集中是唯一的,这使此列成为打破联系的理想选择。


0
投票

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

简单的解决方案是添加一个额外的密钥。在这种情况下,要添加的显而易见的键是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;
© www.soinside.com 2019 - 2024. All rights reserved.