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 |