聚合错误 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