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

时间:2015-12-07 12:49:48

标签: sql ms-access

我的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 个答案:

答案 0 :(得分: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;