我正在关注本教程: http://www.postgresqltutorial.com/postgresql-window-function/
我正在寻找本教程中未描述的案例,但找不到解决方案。
在本教程的某一时刻,此SELECT查询用于显示按组名分组的产品及其在每个组中升序排列的价格,这是结果:
请求是:
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);
我想像示例中那样按价格对行进行排序,并按字母降序对分区进行排序,例如:
如何修改请求以获取此结果?
答案 0 :(得分:2)
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 |