如何在 Access 查询中选择最高计数?

Posted

技术标签:

【中文标题】如何在 Access 查询中选择最高计数?【英文标题】:How to select highest count in Access query? 【发布时间】:2015-12-07 12:49:47 【问题描述】:

我的 Access 数据库表 ITEM 有 2 列:ITEMID 和 CATEGORY。

ITEMID  CATEGORY
I01 C01
I02 C02
I03 C01
I04 C02
I05 C03

我想做一个查询,选择具有最大项目数的项目类别。 我写的查询如下:

SELECT TOP 1 ITEM.CATEGORY
FROM ITEM
GROUP BY ITEM.CATEGORY
ORDER BY COUNT(ITEM.ITEMID) DESC;

结果如下:

CATEGORY
C02
C01

查询的另一个版本(使用嵌套方法)如下:

SELECT ITEM.CATEGORY
FROM ITEM
GROUP BY ITEM.CATEGORY
HAVING COUNT(*)=
(SELECT MAX(TBL2.CNT2) 
FROM 
(SELECT COUNT(*) AS CNT2
FROM ITEM
GROUP BY ITEM.CATEGORY) AS TBL2);

结果如下:

CATEGORY
C01
C02

请注意,两个查询返回相同的结果,但顺序不同:第一个返回 C02,然后是 C01,而第二个返回 C01,C02

请发表评论。还有更好的选择吗?

【问题讨论】:

你有什么问题? 我在这里写的查询有没有更好的替代方法? 【参考方案1】:

您的查询很好。请注意,MS Access 中的 TOP 等同于 SQL Server 中的 TOP WITH TIES。也就是说,它返回有关系的行。

请注意,结果集没有排序(除非您包含ORDER BY),因此两个结果集是相同的。

如果您只想要一个(任意)类别,则将另一个密钥添加到 ORDER BY 以防止平局:

SELECT TOP 1 ITEM.CATEGORY
FROM ITEM
GROUP BY ITEM.CATEGORY
ORDER BY COUNT(ITEM.ITEMID) DESC, ITEM.CATEGORY;

【讨论】:

使用 ORDER BY COUNT(ITEM.ITEMID) DEC, ITEM.CATEGORY,结果只有一个条目:C01

以上是关于如何在 Access 查询中选择最高计数?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql如何以10分钟间隔选择计数聚合结果

如何在选择查询中增加 sql 计数器

选择的字段不包含在 GROUP BY 子句中,那么这个 Access 查询如何成功运行?

如何在 Access 查询中选择前 1 - 并实际让它工作

如何使用 group by(基于一列)从表中选择多列,在 hive 查询中具有和计数

如何在 Access 2010 的选择查询中创建自动增量字段?