这是表格:
| id | 地区 | 品种 | 价格 |
|---|---|---|---|
| 1 | 亚历山大谷 | 赤霞珠 | 35 |
| 2 | 亚历山大谷 | 赤霞珠 | 45 |
| 3 | 亚历山大谷 | 梅洛 | 19 |
| 4 | 加利福尼亚州 | 长相思 | 8 |
| 5 | 加利福尼亚州 | 黑皮诺 | 17 |
我想找出每个地区最便宜和最昂贵的品种,因此输出应该是:
| 地区 | 贵 | 便宜 |
|---|---|---|
| 亚历山大谷 | 赤霞珠 | 梅洛 |
| 加利福尼亚州 | 黑皮诺 | 长相思 |
我能够使用两个 first_value() 获得正确的结果
SELECT DISTINCT region, FIRST_VALUE(variety) OVER (PARTITION BY region ORDER BY price DESC) AS expensive, FIRST_VALUE(variety) OVER (PARTITION BY region ORDER BY price) AS cheapest FROM wine_list
我认为它相当于以下查询
SELECT DISTINCT region, FIRST_VALUE(variety) OVER (PARTITION BY region ORDER BY price DESC) AS expensive, LAST_VALUE(variety) OVER (PARTITION BY region ORDER BY price DESC) AS cheapest FROM wine_list
但是现在我的输出是:
| 地区 | 贵 | 便宜 |
|---|---|---|
| 亚历山大谷 | 赤霞珠 | 赤霞珠 |
| 亚历山大谷 | 赤霞珠 | 梅洛 |
| 加利福尼亚州 | 黑皮诺 | 黑皮诺 |
| 加利福尼亚州 | 黑皮诺 | 长相思 |
为什么我的输出是错误的?我很困惑。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
FIRST_VALUE和LAST_VALUE的默认窗口是ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。 IE。这是第一个响应。最后一个值“到目前为止”。但是,您希望它适用于整个数据集,因此您必须明确描述窗口范围:
SELECT DISTINCT region, FIRST_VALUE(variety) OVER (PARTITION BY region ORDER BY price DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS expensive, LAST_VALUE(variety) OVER (PARTITION BY region ORDER BY price DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS cheapest FROM wine_list;