利用 GROUP BY HAVING 解决复杂的问题

问题一:找到平均交货时间超过所有供应商的平均交货时间的供应商(挑选低效率的供应商)
查找交货时间大于2015 季度平均水平的供应商
复制代码
SELECT v.VendName,
       AVG(DATEDIFF(DAY, p.OrderDate, p.DeliveryDate)) DeliveryDays
FROM dbo.Vendors v
    JOIN dbo.PurchaseOrders p
        ON v.VendorID = p.VendorID
WHERE p.DeliveryDate IS NOT NULL
      AND p.OrderDate >= '2015-10-01 00:00:00'
      AND p.OrderDate < '2016-01-01 00:00:00'
GROUP BY v.VendName
HAVING AVG(DATEDIFF(DAY, p.OrderDate, p.DeliveryDate)) >
(
    SELECT AVG(DATEDIFF(DAY, OrderDate, DeliveryDate))
    FROM dbo.PurchaseOrders
    WHERE DeliveryDate IS NOT NULL
          AND OrderDate >= '2015-10-01 00:00:00'
          AND OrderDate < '2016-01-01 00:00:00'
);
复制代码
问题二:列出在一定时间内的总销售额大于某个类别下的所有产品的平均销售额的产品(按类别查找畅销产品)
查找2015年第4季度按类别查找最畅销的产品
复制代码
SELECT c.CategoryDescription,
       p.ProductName,
       SUM(od.QuotedPrice * od.QuantityOrdered) totalsales
FROM dbo.Products p
    JOIN dbo.Order_Details od
        ON p.ProductNumber = od.ProductNumber
    JOIN dbo.Categories c
        ON p.CategoryID = c.CategoryID
    JOIN dbo.Orders o
        ON o.OrderNumber = od.OrderNumber
WHERE o.OrderDate BETWEEN '2015-10-01' AND '2015-12-31'
GROUP BY p.CategoryID, c.CategoryDescription, p.ProductName
HAVING SUM(od.QuotedPrice * od.QuantityOrdered) >
(
    SELECT AVG(sumcategory)
    FROM
    (
        SELECT p2.CategoryID,
               p2.ProductNumber,
               SUM(od2.QuotedPrice * od2.QuantityOrdered) sumcategory
        FROM dbo.Products p2
            JOIN dbo.Order_Details od2
                ON p2.ProductNumber = od2.ProductNumber
            JOIN dbo.Orders o2
                ON o2.OrderNumber = od2.OrderNumber
        WHERE p2.CategoryID = p.CategoryID  --在外部查询中过滤此类别
              AND o2.OrderDate BETWEEN '2015-10-01' AND '2015-12-31'
        GROUP BY p2.CategoryID, p2.ProductNumber
    ) s
    GROUP BY s.CategoryID
)
ORDER BY c.CategoryDescription, p.ProductName;
复制代码

 

posted @   最萌小胡胡  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
历史上的今天:
2018-09-10 Json模块dumps、dump、loads、load函数介绍
点击右上角即可分享
微信分享提示