SQL聚合计数函数和ORDER BY子句

时间:2014-11-13 07:41:20

标签: sql ms-access

我有一个MS Access数据库表,其中包含以下列,以及其他列:Product和State - 该表名为“Consumer_Complaints”。投诉是在美国所有州的许多产品上进行的。我编写了以下SQL查询以获取按州分组的所有产品的列表(此查询是编写另一个查询以获取在每个州收到大量投诉的产品的第一步):

SELECT State, Product
FROM Consumer_Complaints
ORDER BY State, Product;

上面的查询有效。

但是,我不知道为什么以下查询来计算按州分组的每种产品的数量不起作用(此查询是编写查询以获得收到最多的产品的第二步每个州的投诉数量):

SELECT State, Product, COUNT(Product) AS Product_Count
FROM(SELECT State, Product
FROM Consumer_Complaints
ORDER BY State, Product)
ORDER BY State, Product;

我从MS Access收到以下错误消息:“您尝试执行的查询不包含指定表达式'State'作为聚合函数的一部分。”

我做错了什么?

3 个答案:

答案 0 :(得分:2)

简化,简化。

SELECT State, Product, COUNT(Product) AS Product_Count 
FROM Consumer_Complaints 
GROUP BY State, Product
ORDER BY State, Product;

我不知道你为什么收到错误消息“你试图执行一个不包含指定表达式'State'的查询作为聚合函数的一部分。”这有点荒谬。

但是当使用COUNT(),MAX(),SUM()等聚合函数时,还需要使用GROUP BY子句。而且,稍微松散地说,SELECT子句中的每一列必须是a)聚合函数的参数,或b)在GROUP BY子句中命名。

答案 1 :(得分:-1)

它应该是这样的:

SELECT  State,
        Product,
        COUNT(Product) AS Product_Count
FROM    Consumer_Complaints
GROUP BY State,
        Product
ORDER BY State,
        Product;

答案 2 :(得分:-1)

您不需要子查询只需使用此查询

SELECT State, Product, COUNT(Product) AS Product_Count
FROM
Consumer_Complaints
GROUP BY State, Product
ORDER BY State, Product;

如果您的要求是仅使用子查询,那么您可以使用此

SELECT State, Product, COUNT(Product) AS Product_Count
FROM
( 
SELECT State, Product
FROM Consumer_Complaints
)
GROUP BY State, Product
ORDER BY State, Product;

你不必在ORDER BY State, Product中使用subquery因为你已经在外部查询中写过了。{/ p>