聚合错误 SQL 查询
Aggregated error SQL query
select
person.firstname,
person.lastname,
sum(order_item.pricecharged) as [sales]
from person cross join order_item
join ORDERS
on ORDERS.EmployeeID = PERSON.PersonID
group by person.firstname
出现以下错误:
Msg 8120, Level 16, State 1, Line 5
Column 'person.LastName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
(抱歉对 SQL 查询还是陌生的)
完全按照错误消息告诉您的操作,将所有 "non-aggregating" 列放入 group by 子句中:
SELECT
person.firstname -- this is "non-aggregating"
, person.lastname -- this is "non-aggregating"
, SUM(order_item.pricecharged) AS [sales] -- this is "aggregating"
FROM person
CROSS JOIN order_item
JOIN ORDERS ON ORDERS.EmployeeID = PERSON.PersonID
GROUP BY
person.firstname
, person.lastname
该错误告诉您出了什么问题 - 您不能在 select 列表(特别是 person.lastname)中有一个不在分组列表中的列,除非它具有聚合函数在上面。您是按名字分组,然后将姓氏添加到输出中。如果您有 Bob Jones 和 Bob Smith 怎么办 - 两者的销售额将加在一起,但您没有告诉 SQL 如何处理姓氏,所以会出错。
在这种情况下,您可能希望将组行更改为
group by person.firstname, person.lastname
select
person.firstname,
person.lastname,
sum(order_item.pricecharged) as [sales]
from person cross join order_item
join ORDERS
on ORDERS.EmployeeID = PERSON.PersonID
group by person.firstname
出现以下错误:
Msg 8120, Level 16, State 1, Line 5 Column 'person.LastName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
(抱歉对 SQL 查询还是陌生的)
完全按照错误消息告诉您的操作,将所有 "non-aggregating" 列放入 group by 子句中:
SELECT
person.firstname -- this is "non-aggregating"
, person.lastname -- this is "non-aggregating"
, SUM(order_item.pricecharged) AS [sales] -- this is "aggregating"
FROM person
CROSS JOIN order_item
JOIN ORDERS ON ORDERS.EmployeeID = PERSON.PersonID
GROUP BY
person.firstname
, person.lastname
该错误告诉您出了什么问题 - 您不能在 select 列表(特别是 person.lastname)中有一个不在分组列表中的列,除非它具有聚合函数在上面。您是按名字分组,然后将姓氏添加到输出中。如果您有 Bob Jones 和 Bob Smith 怎么办 - 两者的销售额将加在一起,但您没有告诉 SQL 如何处理姓氏,所以会出错。
在这种情况下,您可能希望将组行更改为
group by person.firstname, person.lastname