首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Group语句的SQL查询

使用Group语句的SQL查询
EN

Stack Overflow用户
提问于 2016-09-10 09:37:30
回答 2查看 80关注 0票数 1

我有4张桌子:

经理,销售,SaleDetails,产品:

  • Manager:ID,名称
  • Sales:ID,ManagerID,SaleNO,SaleDate
  • SaleDetails:ID,SaleID,ProductID,数量
  • 产品:ID,名称,价格

我想为每个经理检索: SaleDate和独特的产品计数;

我的选择如下:

代码语言:javascript
复制
;WITH cte
AS
(
    SELECT sd.SaleID, sd.ProductID FROM dbo.Products p
        INNER JOIN dbo.SalesDetails sd ON sd.ProductID = p.ID
    GROUP BY sd.SaleID, sd.ProductID
)
SELECT
     c.Name AS ManagerName
    ,s.SaleDate
    ,COUNT(ct.ProductID) AS ProductCount
FROM cte ct
    INNER JOIN dbo.Sales s ON ct.SaleID = s.ID
    INNER JOIN dbo.Managers c ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name

这是最优的吗?您能帮助我用更优化的查询来替换它吗?

  • 经理: ID = 1,Name = John;
  • 销售: ID = 1,ManagerID = 1,SaleNO = 0015,SaleDate: 2016-09-08,ID = 2,ManagerID = 1,SaleNO = 0016,SaleDate: 2016-09-09
  • SaleDetails: ID = 1,SaleID = 1,ProductID = 1,Quantity = 2,ID = 2,SaleID = 1,ProductID = 1,Quantity = 4,ID = 3,SaleID = 1,ProductID = 2,Quantity = 3,ID = 4,SaleID = 2,ProductID = 1,Quantity =3
  • 产品: ID = 1,Name = Sony,ID = 2,Name = Samsung

查询必须返回结果:

  • ManagerName = John,SaleDate = 2016-09-08,ProductCount =2
  • ManagerName = John,SaleDate = 2016-09-09,ProductCount =1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-10 09:46:43

代码语言:javascript
复制
SELECT c.Name AS ManagerName
      ,s.SaleDate
      ,COUNT(p.ProductID)
FROM dbo.Products p
INNER JOIN dbo.SalesDetails sd ON sd.ProductID = p.ID
INNER JOIN dbo.Sales s ON sd.SaleID = s.ID
INNER JOIN dbo.Managers c ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name,sd.ProductID
票数 2
EN

Stack Overflow用户

发布于 2016-09-10 10:59:08

正确的答案(正如我读到的问题)是:

代码语言:javascript
复制
SELECT c.Name AS ManagerName, s.SaleDate, COUNT(DISTINCT sd.ProductId)
FROM dbo.SalesDetails sd
     dbo.Sales s
     ON sd.SaleID = s.ID INNER JOIN
     dbo.Managers c
     ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name;

备注:

  • 不需要Products表,因为SalesDetails表具有产品信息。
  • 产品id不在GROUP BY中。
  • 正确的聚合函数是COUNT(DISTINCT)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39424721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档