@eldar_web

Как в SQL вывести дешевую среди всех по условию?

К примеру есть таблица price_items:
idmake_namecost
1TOYOTA350
2TOYOTA100
3FIAT210
4TOYOTA190

Есть условие, что надо вытащить TOYOTA где id = 1, но чтобы вместо его цены была самая дешевая среди таких брендов, то есть, TOYOTA, по сути это 100.

Запрос вида:
SELECT p2.cost FROM price_items AS p1 INNER JOIN price_items AS p2 ON p1.make_name = p2.make_name WHERE p1.id = 1
ORDER BY p2.cost
, не работает, так как вместо того, чтобы вытащить одну строку, он выводит все строки с брендами TOYOTA.
Как составить правильный запрос?
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 3
coderisimo
@coderisimo
ну и допишите LIMIT 1 :)
Ответ написан
LaRN
@LaRN
Senior Developer
Вот так можно попробовать, чтобы по всем брендам сразу:
SELECT p2.make_name, min(p1.id), min(p2.cost) 
  FROM price_items AS p1
 INNER JOIN price_items AS p2
         ON p1.make_name = p2.make_name 
 GROUP BY p2.make_name
Ответ написан
Комментировать
Условие задачи не формализовано. 1) нужно определить группу, среди которой ищется самая низкая цена, я так понимаю в вашем случае это марка, возможно в реальном мире это будет марка и модель. 2) Вы хотите выбрать одну строку например по ID =1 и еденица с минимальной ценой в выборку не попадает, но вы хотите выбрать минимальную для этой группы цену? Вам нужно использовать оконные функции.

https://www.postgresql.org/docs/9.1/tutorial-windo...
https://dev.mysql.com/doc/refman/8.0/en/window-fun...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@baimkin
SELECT cost FROM price_items WHERE name = (SELECT name FROM price_items WHERE id = 1)
ORDER BY cost LIMIT 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы