【问题标题】:SQL Sum and Group on two tables两个表上的 SQL Sum 和 Group
【发布时间】:2017-09-15 02:12:00
【问题描述】:

我对 SQL 非常陌生,并且正在努力完成一些作业以提高我的知识。不过,我发现自己遇到了一个问题。
我必须通过使用乘法和减法来找到项目的总利润,我已经使用以下命令完成了:

select 
   production.product.ProductID, 
   StandardCost, 
   sales.SalesOrderDetail.OrderQty, 
   UnitPrice,
   (sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
   (production.product.StandardCost*sales.salesorderdetail.OrderQty) as 
   'Total Profit'
from 
     sales.SalesOrderDetail, 
     production.product

我需要做的是汇总总利润并按 ProductID 分组,以便找到最赚钱和最不赚钱的项目。我认为这会起作用:

select 
     production.product.ProductID, 
     StandardCost, 
     sales.SalesOrderDetail.OrderQty, 
     UnitPrice,
     sum((sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
     (production.product.StandardCost*sales.salesorderdetail.OrderQty)) as 
     'Total Profit'
from 
    sales.SalesOrderDetail, 
    production.product
group by 
    Production.Product.ProductID

但是,我收到以下错误:

选择列表中的列“production.product.StandardCost”无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

我不知道从哪里继续。我尝试重新排列并进行内/左连接,但没有成功。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    因此,对于分组,您需要聚合或包含在 group by 语句中。 您正在按 productID 分组,但其他列未聚合且不在 group by 语句中。

    可以进行更正(取决于您希望如何聚合其他列)

    select 
      production.product.ProductID
      , avg(StandardCost) as AvgCost
      , sum(sales.SalesOrderDetail.OrderQty) as TotalQuantity
      , avg(UnitPrice) as AvgUnitPrice
      , sum((sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
            (production.product.StandardCost*sales.salesorderdetail.OrderQty)) as [Total Profit]
    from sales.SalesOrderDetail
    , production.product
    group by Production.Product.ProductID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 2020-01-19
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多