powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как выбрать по одной записи для каждой группы из таблицы
3 сообщений из 3, страница 1 из 1
как выбрать по одной записи для каждой группы из таблицы
    #40038313
mariem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написала запрос для выборки данных (результат выполнения на скриншоте)
что необходимо добавить в запрос, чтобы вывести максимальный revenue для каждого из двух адресов?
по идее это будут две верхние строчки, но выражение limit(2) не подходит, т.к. мы не знаем изначально, это для разных магазинов или одного. если я правильно понимаю, выражение distinct on(a2.address) также не подходит, ибо не факт, что выведет максимальные revenue для магазинов

SELECT a2.address,
s.first_name,
s.last_name,
sum(p.amount) AS revenue
FROM staff s
JOIN store s2 ON s.store_id=s2.store_id
JOIN payment p ON s.staff_id=p.staff_id
JOIN address a2 ON s2.address_id=a2.address_id
WHERE EXTRACT (YEAR FROM p.payment_date)=2017
GROUP BY s.first_name, s.last_name, a2.address
ORDER BY revenue DESC;
...
Рейтинг: 0 / 0
как выбрать по одной записи для каждой группы из таблицы
    #40038394
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mariem,

row_number для группы, затем отфильтровать row_number = 1. решение в лоб, с точки производительности плохо, так как нужно считать все данные.
...
Рейтинг: 0 / 0
как выбрать по одной записи для каждой группы из таблицы
    #40038412
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mariem
написала запрос для выборки данных (результат выполнения на скриншоте)
что необходимо добавить в запрос, чтобы вывести максимальный revenue для каждого из двух адресов?
по идее это будут две верхние строчки, но выражение limit(2) не подходит, т.к. мы не знаем изначально, это для разных магазинов или одного. если я правильно понимаю, выражение distinct on(a2.address) также не подходит, ибо не факт, что выведет максимальные revenue для магазинов

SELECT a2.address,
s.first_name,
s.last_name,
sum(p.amount) AS revenue
FROM staff s
JOIN store s2 ON s.store_id=s2.store_id
JOIN payment p ON s.staff_id=p.staff_id
JOIN address a2 ON s2.address_id=a2.address_id
WHERE EXTRACT (YEAR FROM p.payment_date)=2017
GROUP BY s.first_name, s.last_name, a2.address
ORDER BY revenue DESC;


именно distinct on (a2.address) вам и нужен...


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with _t1 (SELECT a2.address, 				
s.first_name,
s.last_name, 
sum(p.amount) AS revenue								
FROM staff s 
JOIN store s2 	ON s.store_id=s2.store_id 
JOIN payment p 	ON s.staff_id=p.staff_id 
JOIN address a2 ON s2.address_id=a2.address_id 
WHERE EXTRACT (YEAR FROM p.payment_date)=2017			
GROUP BY s.first_name, s.last_name, a2.address)

SELECT DISTINCT ON (address) * FROM _t1
ORDER BY address,  revenue DESC ;


https://www.postgresql.org/docs/12/sql-select.html#SQL-DISTINCT



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как выбрать по одной записи для каждой группы из таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]