使用last_value()时结果不正确
P粉486743671
P粉486743671 2024-03-31 11:23:07
0
1
461

这是表格:

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

但是现在我的输出是:

地区 便宜
亚历山大谷 赤霞珠 赤霞珠
亚历山大谷 赤霞珠 梅洛
加利福尼亚州 黑皮诺 黑皮诺
加利福尼亚州 黑皮诺 长相思

为什么我的输出是错误的?我很困惑。

P粉486743671
P粉486743671

全部回复(1)
P粉253800312

FIRST_VALUELAST_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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板