【问题标题】:SQL SELECT MIN value with WHERE statement带有 WHERE 语句的 SQL SELECT MIN 值
【发布时间】:2018-05-24 18:29:30
【问题描述】:

我正在尝试获取 SQL 上特定报价的最低价格。我尝试了以下错误结果:

  • SELECT * FROM price WHERE price=(SELECT MIN(price) as price FROM price WHERE id_quote=36

  • SELECT id_provider, MIN(price) as price FROM price WHERE id_quote=36

我了解,如果我在该表中的价格相同,则无论报价如何,我都会在第一个查询中获得多个结果。但我不知道为什么第二个没有给我正确的结果。

我只需要从该特定报价(无组)中调用 id_provider 及其价格。

有什么帮助吗?

【问题讨论】:

  • 在第二个中,您选择 id_provider。你期待哪一个?

标签: mysql sql


【解决方案1】:

我认为你只需要一个相关的子查询:

SELECT p.*
FROM price p
WHERE p.id_quote = 36 AND
      p.price = (SELECT MIN(p2.price) FROM price p2 WHERE p2.id_quote = p.id_quote);

请注意,“引用”条件已移至外部查询。

【讨论】:

    【解决方案2】:

    我喜欢使用 RANK() 来解决这类问题:

    SELECT id_quote, id_provider, price
    FROM
    (
    SELECT id_quote id_provider, price,
    RANK() OVER(PARTITION BY id_quote ORDER BY price ASC) AS rnk
    FROM price
    ) sub
    WHERE rnk = 1
    

    【讨论】:

    • 我不相信 MySQL 在 MySQL 8 之前添加了窗口函数。所以这可能行不通。
    【解决方案3】:
    You can do it this way if you want:
    
    SELECT TOP 1 id_provider, price FROM price WHERE id_quote=36 ORDER BY price ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 2013-10-10
      • 1970-01-01
      • 2017-03-16
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      相关资源
      最近更新 更多