SQL查询sum()/ join / order by / - 出了什么问题?

时间:2014-04-06 20:26:33

标签: sql sql-server join group-by sql-order-by

我学习SQL,使用Northwind示例数据库而且我完全停留在非常简单的问题上: 我想列出一列中的所有产品名称以及第二列中每种产品的总销售量。 首先,我这样做了:

select p.ProductId
    ,sum(od.Quantity) as TotalQuantity 
from Products p  
join [Order Details] od 
    on p.ProductId=od.Productid
group by p.ProductId

这没关系 - 我有产品编号和总数量,但是当我尝试这样的东西时:

select p.productid
    ,p.ProductName
    , sum(od.quantity) as TotalQuantity
from products p  
join [Order details] od 
    on p.productid=od.productid
group by p.productid

我收到错误:

Msg 8120, Level 16, State 1, Line 1
Column 'products.ProductName' is invalid in the select list because 
it is not contained in either an aggregate function or the GROUP BY clause.`

2 个答案:

答案 0 :(得分:1)

当您使用汇总函数(例如sum)时,您必须group by

中的每个其他字段select

您必须按如下方式修改您的查询

select p.productid, p.ProductName, sum(od.quantity) as TotalQuantity from
products p  join [Order details] od on p.productid=od.productid
group by p.productid, p.ProductName

答案 1 :(得分:1)

鉴于您永远不会为单个ProductId获取不同的ProductNames,您也​​可以尝试:

select p.productid
, min(p.ProductName) as ProductName
, sum(od.quantity) as TotalQuantity
from products p  
join [Order details] od 
    on p.productid=od.productid
group by p.productid