SQL SELECT MIN значение с оператором WHERE

0

Я пытаюсь получить самую низкую цену конкретной цитаты на SQL. Я пробовал следующее с ошибочными результатами:

  • SELECT * FROM price WHERE price = (SELECT MIN (цена) как цена от цены WHERE id_quote = 36

  • SELECT id_provider, MIN (цена) в зависимости от цены WHERE id_quote = 36

Я понимаю, что я получаю несколько результатов по первому запросу, если у меня такая же цена в этой таблице, независимо от цитаты. Но я не знаю, почему второй не дает мне правильных результатов.

Мне нужно вызвать только id_provider и его цену из этой конкретной цитаты (без группы).

Любая помощь?

Изображение 174551

  • 0
    Во втором вы выбираете id_provider. Кого ты ожидаешь?
Теги:

3 ответа

2

Я думаю, вам просто нужен коррелированный подзапрос:

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

Обратите внимание, что условие "quote" переместилось во внешний запрос.

1

Мне нравится использовать 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
  • 0
    Я не верю, что MySQL добавил оконные функции до MySQL 8. Так что это может не сработать.
0
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню