Voici le formulaire :
id | Région | Variété | Prix |
---|---|---|---|
1 | Vallée Alexandre | Cabernet Sauvignon | 35 |
2 | Vallée Alexandre | Cabernet Sauvignon | 45 |
3 | Vallée Alexandre | Merlot | 19 |
4 | Californie | Sauvignon Blanc | 8 |
5 | Californie | Pinot Noir | 17 |
Je souhaite connaître les variétés les moins chères et les plus chères dans chaque région, le résultat devrait donc être :
Région | Cher | Pas cher |
---|---|---|
Vallée Alexandre | Cabernet Sauvignon | Merlot |
Californie | Pinot Noir | Sauvignon Blanc |
J'ai pu obtenir les bons résultats en utilisant les deux 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
Je pense que cela équivaut à la requête suivante
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
Mais maintenant, mon résultat est :
Région | Cher | Pas cher |
---|---|---|
Vallée Alexandre | Cabernet Sauvignon | Cabernet Sauvignon |
Vallée Alexandre | Cabernet Sauvignon | Merlot |
Californie | Pinot Noir | Pinot Noir |
Californie | Pinot Noir | Sauvignon Blanc |
Pourquoi ma sortie est-elle fausse ? Je suis confus.
FIRST_VALUE
和LAST_VALUE
的默认窗口是ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. c'est à dire. C'est la première réponse. La dernière valeur est "jusqu'à présent".Cependant, vous souhaitez que cela s'applique à l'ensemble de données, vous devez donc décrire explicitement la plage de fenêtres :