suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Falsche Ergebnisse bei Verwendung von last_value()

Das ist das Formular:

id Region Vielfalt Preis
1 Alexander Valley Cabernet Sauvignon 35
2 Alexander Valley Cabernet Sauvignon 45
3 Alexander Valley Merlot 19
4 Kalifornien Sauvignon Blanc 8
5 Kalifornien Pinot Noir 17

Ich möchte die günstigsten und teuersten Sorten in jeder Region herausfinden, daher sollte die Ausgabe sein:

Region Teuer Günstig
Alexander Valley Cabernet Sauvignon Merlot
Kalifornien Pinot Noir Sauvignon Blanc

Mit beiden konnte ich die richtigen Ergebnisse erzielen 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

Ich denke, es entspricht der folgenden Abfrage

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

Aber jetzt ist meine Ausgabe:

Region Teuer Günstig
Alexander Valley Cabernet Sauvignon Cabernet Sauvignon
Alexander Valley Cabernet Sauvignon Merlot
Kalifornien Pinot Noir Pinot Noir
Kalifornien Pinot Noir Sauvignon Blanc

Warum ist meine Ausgabe falsch? Ich bin verwirrt.

P粉486743671P粉486743671232 Tage vor409

Antworte allen(1)Ich werde antworten

  • 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;

    Antwort
    0
  • StornierenAntwort