搜尋

首頁  >  問答  >  主體

使用last_value()時結果不正確

這是表格:

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粉486743671P粉486743671268 天前458

全部回覆(1)我來回復

  • P粉253800312

    P粉2538003122024-04-01 09:18:04

    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;

    回覆
    0
  • 取消回覆