Postgresql 对分区和分区内的行进行排序

Postgresql 对分区和分区内的行进行排序,postgresql,sorting,postgresql-8.4,Postgresql,Sorting,Postgresql 8.4,我将学习本教程: 我正在寻找一个教程中没有描述的案例,但我没有找到解决方案 在本教程的某一时刻,此选择查询用于显示按组名分组的产品及其在每个组中按升序排序的价格,结果如下: 请求是: SELECT product_name, group_name, price, ROW_NUMBER () OVER ( PARTITION BY group_name ORDER BY price ) FROM products INNER JOIN product_groups USING

我将学习本教程:

我正在寻找一个教程中没有描述的案例,但我没有找到解决方案

在本教程的某一时刻,此选择查询用于显示按组名分组的产品及其在每个组中按升序排序的价格,结果如下:

请求是:

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);
我想按照示例中的价格对行进行排序,并按照字母降序对分区进行排序,如下所示:

如何修改请求以获得此结果?

后面可以是逗号分隔的排序表达式列表。使用
ASC
DESC
设置每个表达式的排序方向<代码>ASC(升序)是默认的排序方向

因此,您可以使用
按组订购\u 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 |
可以后跟以逗号分隔的排序表达式列表。使用
ASC
DESC
设置每个表达式的排序方向<代码>ASC(升序)是默认的排序方向

因此,您可以使用
按组订购\u 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 |