SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Коррелирующий подзапрос (Не могу решить задачу)
Коррелирующий подзапрос [сообщение #4156] Mon, 22 January 2024 19:01 Переход к следующему сообщению
bugzzy в настоящее время не в онлайне  bugzzy
Сообщений: 5
Зарегистрирован: January 2024
Junior Member
Не могу вывести максимальное значение по каждой категории, выводит только самое макс занчение, помогите пожалуйста разобраться
Задача
Найди самые дорогие товары в каждой категории товаров (таблица product_price). Выведи столбцы:

category_name - название категории товара;
product_name - название товара;
price - стоимость товара.
Отсортируй результат сначала по названию категории, затем по названию товара.

Помни, что в подзапросах тоже можно выполнять соединение таблиц.
  • Вложение: schemaDiagram.svg
    (Размер: 570.19KB, Загружено 225 раз)
Re: Коррелирующий подзапрос [сообщение #4157 является ответом на сообщение #4156] Mon, 22 January 2024 19:14 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
Как пробовал, что не получается?
Это стандартная задача на Group By
Re: Коррелирующий подзапрос [сообщение #4170 является ответом на сообщение #4157] Tue, 23 January 2024 09:28 Переход к предыдущему сообщениюПереход к следующему сообщению
bugzzy в настоящее время не в онлайне  bugzzy
Сообщений: 5
Зарегистрирован: January 2024
Junior Member
GROUP BY? Я так понял что там отсортировать просят поэтому пишу ORDER BY
вот мой варинат

SELECT c.name as category_name,
p.name as product_name,
pp.price
FROM product p
JOIN product_price pp
ON pp.product_id = p.product_id
JOIN category c
ON p.category_id = c.category_id
WHERE pp.price =
(
SELECT max(ppm.price)
FROM product_price ppm
JOIN product p
ON ppm.product_id = p.product_id
JOIN category c
ON p.category_id = c.category_id
WHERE c.category_id = p.category_id
)
ORDER BY category_name, product_name
Re: Коррелирующий подзапрос [сообщение #4176 является ответом на сообщение #4170] Tue, 23 January 2024 14:12 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
Группируй по категории и выбирай максимальную цену. Ну а итог уже отсортируй.
Re: Коррелирующий подзапрос [сообщение #4177 является ответом на сообщение #4176] Tue, 23 January 2024 14:21 Переход к предыдущему сообщениюПереход к следующему сообщению
bugzzy в настоящее время не в онлайне  bugzzy
Сообщений: 5
Зарегистрирован: January 2024
Junior Member
Не нужно там ничего группировать, максимальную цену подзапрос у меня и так возвращает, повторюсь вопрос в том как возвращать максимальную цену по каждой категории, вот так:

category_name product_name price
1 Аудиотехника Наушники S3 17900.00
2 Бытовая техника Холодильник A2 27500.00
3 Игровые консоли Xbox        24600.00
4 Ноутбуки Ультрабук X5 76800.00
5 Рюкзаки        Deepbox        4900.00
6 Сотовые телефоныМоноблок C4 44500.00
7 Фотоаппараты Lord Nikon 95 1321800000.00
Re: Коррелирующий подзапрос [сообщение #4180 является ответом на сообщение #4177] Tue, 23 January 2024 15:09 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
bugzzy
Не нужно там ничего группировать
ну наконец-то на этом форуме появилось своё тро-ло-ло.
дерзай!

[Обновления: Tue, 23 January 2024 15:10]

Известить модератора

Re: Коррелирующий подзапрос [сообщение #4181 является ответом на сообщение #4180] Tue, 23 January 2024 15:30 Переход к предыдущему сообщениюПереход к следующему сообщению
bugzzy в настоящее время не в онлайне  bugzzy
Сообщений: 5
Зарегистрирован: January 2024
Junior Member
Я сдаюсь, и правда не понимаю где нужно группировать...
Re: Коррелирующий подзапрос [сообщение #4194 является ответом на сообщение #4181] Tue, 23 January 2024 18:03 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
Скрипты создания таблиц и тестовые данные приложи
Re: Коррелирующий подзапрос [сообщение #4195 является ответом на сообщение #4194] Tue, 23 January 2024 18:14 Переход к предыдущему сообщению
bugzzy в настоящее время не в онлайне  bugzzy
Сообщений: 5
Зарегистрирован: January 2024
Junior Member
Ребята, я допёр, в любом случае спасибо что откликнулись

SELECT c.name as category_name,
p.name as product_name,
pp.price as price
FROM product p
JOIN product_price pp
ON pp.product_id = p.product_id
JOIN category c
ON p.category_id = c.category_id
JOIN  
(
SELECT c.name as name, max(ppm.price) as price
FROM product_price ppm
JOIN product p on ppm.product_id = p.product_id
JOIN category c on p.category_id = c.category_id
GROUP BY c.name
) as a ON pp.price = a.price and c.name = a.name
ORDER BY category_name, product_name, price
Предыдущая тема: Мониторинг PostgreSQL
Следующая тема: Почему у двух запросов разный вывод
Переход к форуму:
  


Текущее время: Sun Dec 22 14:02:52 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01329 секунд