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中都有一个名称。为什么我收到此错误消息?
答案 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_name
与cust_id
对应。
如果每cust_name
有一个cust_id
,那么按两者进行分组将产生相同数量的行(仅适用于cust_id
)并提供一致且可靠的行为。
答案 1 :(得分:0)
git gui