【问题标题】:select least row per group in SQL在 SQL 中选择每组最少的行
【发布时间】:2011-07-28 18:23:57
【问题描述】:

我正在尝试选择每个条件类别的最低价格。我做了一些搜索并编写了下面的代码。但是,它显示所选字段的 null。有什么解决办法吗?

SELECT Sales.Sale_ID, Sales.Sale_Price, Sales.Condition
FROM Items
LEFT JOIN Sales ON ( Items.Item_ID = Sales.Item_ID
AND Sales.Expires_DateTime > NOW( )
AND Sales.Sale_Price = (
SELECT MIN( s2.Sale_Price )
FROM Sales s2
WHERE Sales.`Condition` = s2.`Condition` ) )
WHERE Items.ISBN =9780077225957 

【问题讨论】:

    标签: sql groupwise


    【解决方案1】:

    一个稍微复杂一点的解决方案,但包含您的 Sale_ID 的解决方案如下。

    SELECT TOP 1 Sale_Price, Sale_ID, Condition
    FROM Sales
    WHERE Sale_Price IN (SELECT MIN(Sale_Price) 
                         FROM Sales 
                         WHERE 
                         Expires_DateTime > NOW() 
                         AND 
                           Item_ID IN     
                             (SELECT Item_ID FROM Items WHERE ISBN = 9780077225957) 
                         GROUP BY Condition )
    

    “TOP 1”是为了防止超过 1 个销售具有相同的最低价格,而您只希望退回一个。

    (内部查询直接取自@Michael Ames 答案)

    【讨论】:

      【解决方案2】:

      如果您不需要 Sales.Sale_ID,这个解决方案更简单:

      SELECT MIN(Sale_Price), Condition
      FROM Sales
      WHERE Expires_DateTime > NOW()
      AND Item_ID IN
          (SELECT Item_ID FROM Items WHERE ISBN = 9780077225957)
      GROUP BY Condition
      

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2014-05-12
        • 2021-09-16
        • 2022-11-13
        • 2014-08-24
        • 2014-07-27
        • 2021-02-25
        • 1970-01-01
        • 2013-05-07
        • 2020-03-16
        相关资源
        最近更新 更多