Heim > Fragen und Antworten > Hauptteil
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粉2538003122024-04-01 09:18:04
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;