非常基本的SQL脚本与聚合

时间:2016-05-14 13:14:39

标签: sql ms-access

select Customers.cust_id, count(Orders.cust_id)  
from Customers left outer join Orders  
on Customers.cust_id=Orders.cust_id  
group by Customers.cust_id

这正确显示了所有内容。

select Customers.cust_id, ***Customers.cust_name***, count(Orders.cust_id)  
from Customers left outer join Orders  
on Customers.cust_id=Orders.cust_id  
group by Customers.cust_id  

,您的查询不包含指定的表达式' cust_name'作为聚合函数的端口。"

为什么? Customers中的每个cust_id在cust_name中都有一个名称。为什么我收到此错误消息?

2 个答案:

答案 0 :(得分:2)

当您使用聚合函数count()时,所有其他字段(不与聚合函数一起使用)必须出现在Group By子句中。

以下是我解释原因:

聚合函数跨组运行。

(也就是说,除非没有指定任何组或其他字段,否则默认情况下它们会在整个记录集中运行。例如,SELECT Sum(Salary) FROM Staff有效。)

如果按cust_id进行分组,则它会知道要输出的内容,即每个cust_id的计数。但是它会对cust_name做什么呢?每个cust_name输出会显示哪个cust_id或应该显示哪个?{1}}?如果cust_name有多个cust_id,该怎么办?它只会为每个cust_id显示一行,那么它应该显示在哪一个名称旁边?它不会假设只有一个cust_namecust_id对应。

如果每cust_name有一个cust_id,那么按两者进行分组将产生相同数量的行(仅适用于cust_id)并提供一致且可靠的行为。

答案 1 :(得分:0)

git gui