【问题标题】:SQL - Comparing and Grouping Data on multiple rowsSQL - 比较和分组多行数据
【发布时间】:2012-02-12 04:38:23
【问题描述】:

我正在尝试查询我的数据库,以找出 10 月份哪些产品的销量低于 11 月或 12 月。

我认为像下面这样可以做到,但我感觉子查询将返回整个数据库而不是特定产品的最小数量。

使用 GROUP BY 一定有某种方法可以做到这一点,但我想不通。

SELECT Category, Product 
  FROM Sales 
 WHERE SaleQuantity < (SELECT MIN(SaleQuantity) 
                       FROM Sales 
                       WHERE MonthNumber > 10) 
   AND MonthNumber = 10 

数据如下:

Category   Product     MonthNumber   SaleQuantity
---------- ----------- ------------- -----------
11         14          10            210
11         14          11            200
11         14          12            390
15         12          10            55
15         12          11            24
17         12          12            129
19         10          10            12

谢谢。

【问题讨论】:

  • 这是 SQL Server 吗?您是否考虑过包含产品、月份和最低(销售额)的 CTE,然后加入其中?
  • 我只是认为可能有一种使用标准 SQL 获取这些数据的简单方法
  • 这完全是个人喜好问题,但我对您在问题中给出的查询的经验是,如果您使用 CTE,您将获得一个简单、干净的实现。

标签: sql


【解决方案1】:


试试这样的

SELECT Category,
         Product, 
         SUM( s.SaleQuantity ) AS saleOcotber,
         SUM( ISNULL( son.SaleQuantity, 0 ) ) AS saleNovember,
         SUM( ISNULL( sod.SaleQuantity, 0 ) ) AS saleDecember
FROM Sales s
  LEFT OUTER JOIN Sales son ON son.Category = s.Category
     AND son.Product = s.Product
     AND son.MonthNumber = 11
  LEFT OUTER JOIN Sales sod ON sod.Category = s.Category
     AND sod.Product = s.Product
     AND sod.MonthNumber = 11
WHERE s.MonthNumber = 10
GROUP BY Category,Product
WHERE SUM( s.SaleQuantity ) < SUM( ISNULL( son.SaleQuantity, 0 ) )
   OR SUM( s.SaleQuantity ) < SUM( ISNULL( sod.SaleQuantity, 0 ) )

我没有测试过这个选择,但我认为如果有不清楚的地方它会起作用 请问

最好的问候, 约旦

PS。我假设您正在使用某些版本的 MSSQL,如果不尝试自己重写它,您正在使用的 int SQL

【讨论】:

    【解决方案2】:

    对于 SalesQuantity,您的表格似乎已按类别、产品和月份编号进行汇总。如果是这样,试试这个:

    select distinct Category, Product
    from Sales s11_12
    where MonthNumber in (11,12) and
          not exists (select null
                      from Sales s10
                      where s10.Category = s11_12.Category and
                            s10.Product = s11_12.Product and
                            s10.SalesQuantity >= s11_12.SalesQuantity)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-08
      • 2015-02-13
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多