Сортировать разделы и строки внутри разделов - PullRequest
0 голосов
/ 31 января 2019

Я следую этому уроку: http://www.postgresqltutorial.com/postgresql-window-function/

Я ищу случай, который не описан в этом уроке, и я не нашел решения.

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

Sorted by prices inside the partition

запрос:

SELECT
 product_name,
 group_name,
 price,
 ROW_NUMBER () OVER (
 PARTITION BY group_name
 ORDER BY
 price
 )
FROM
 products
INNER JOIN product_groups USING (group_id);

Я хотел бы отсортировать строки по цене, как в примере И, чтобы отсортировать раздел по убыванию в алфавитном порядке, например:

Sorted by prices inside the partition and partitions sorted by name

Как изменить запрос для получения этого результата?

1 Ответ

0 голосов
/ 31 января 2019

ORDER BY может сопровождаться разделенным запятыми списком sort_expressions.Используйте ASC или DESC, чтобы установить направление сортировки для каждого выражения.ASC (в порядке возрастания) является направлением сортировки по умолчанию.

Таким образом, вы можете использовать ORDER BY group_name DESC, price:

SELECT
 product_name,
 group_name,
 price,
 ROW_NUMBER () OVER (
 PARTITION BY group_name
 ORDER BY
 group_name DESC, price 
 )
FROM
 products
INNER JOIN product_groups USING (group_id);

выход

| product_name       | group_name |   price | row_number |
|--------------------+------------+---------+------------|
| Kindle Fire        | Tablet     |  150.00 |          1 |
| Samsung Galaxy Tab | Tablet     |  200.00 |          2 |
| iPad               | Tablet     |  700.00 |          3 |
| Microsoft Lumia    | Smartphone |  200.00 |          1 |
| HTC One            | Smartphone |  400.00 |          2 |
| Nexus              | Smartphone |  500.00 |          3 |
| iPhone             | Smartphone |  900.00 |          4 |
| Lenovo Thinkpad    | Laptop     |  700.00 |          1 |
| Sony VAIO          | Laptop     |  700.00 |          2 |
| Dell Vostro        | Laptop     |  800.00 |          3 |
| HP Elite           | Laptop     | 1200.00 |          4 |
...