简体   繁体   English

带WHERE语句的SQL SELECT MIN值

[英]SQL SELECT MIN value with WHERE statement

I'm trying to get the lowest price of a specific quote on SQL. 我正在尝试以最低的价格获得SQL上特定报价的价格。 I tried the following with erroneous results: 我尝试了以下错误结果:

  • SELECT * FROM price WHERE price=(SELECT MIN(price) as price FROM price WHERE id_quote=36 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,将MIN(price)作为价格,从价格WHERE id_quote = 36

I understand that I'm getting multiple results on the first query if I have the same price in that table regardless of the quote. 我知道如果该表中的价格相同,无论报价如何,我都会在第一个查询中获得多个结果。 But I don't know why the second isn't giving me the correct results. 但是我不知道为什么第二个没有给我正确的结果。

I need to call only id_provider and its price from that specific quote (no group). 我只需要从该特定报价(没有组)中调用id_provider及其价格。

Any help? 有什么帮助吗?

价格表

I think you just need a correlated subquery: 我认为您只需要一个相关的子查询:

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);

Notice that the "quote" condition has moved to the outer query. 请注意,“ quote”条件已移至外部查询。

I like using RANK() for this kind of problem: 我喜欢将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
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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM