使用last_value()時結果不正確
P粉486743671
P粉486743671 2024-03-31 11:23:07
0
1
416

這是表格:

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;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板