Lektionen des Moduls (2/4)
Gruppieren mit PARTITION BY
Gruppierung mit PARTITION BY
Globale Berechnungen für jede Zeile sind praktisch, reichen aber oft nicht aus. Möglicherweise möchten wir den Durchschnitt pro Kategorie oder pro Kunde berechnen und dabei die ursprünglichen Details in jeder Zeile beibehalten.
Hier kommt PARTITION BY in der OVER(...)-Klausel ins Spiel.
So funktioniert PARTITION BY
Vom Konzept her verhält es sich ähnlich wie GROUP BY, aber anstatt Zeilen im Ergebnis zu reduzieren, definiert es nur die Grenze des „Datenfensters“, an dem die Funktion arbeitet, um das Ergebnis für die einzelne Zeile zu berechnen.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Jede Produktzeile behält ihre eigenen Details und die Spalte cat_avg_price zeigt den Durchschnitt an, der auf die Produkte derselben Kategorie beschränkt ist.
Extrahieren Sie aus der Tabelle „Produkte“ „id“, „category_id“ und „price“. Fügen Sie eine „category_total“-Spalte hinzu, die mithilfe von Fensterfunktionen die SUMME von „price“ für jede „category_id“ berechnet.
Hinweis anzeigen
Verwenden Sie SUM(price) OVER(PARTITION BY Category_id).
Lösung nach 3 Versuchen verfügbar
Zeigen Sie in der Tabelle „Rezensionen“ „product_id“, „rating“ und „avg_product_rating“ (die durchschnittliche Bewertung, aufgeteilt nach Produkt) an. Alle Zeilen anzeigen.
Hinweis anzeigen
Verwenden Sie AVG(Rating) und PARTITION BY product_id. Wandeln Sie es bei Bedarf in NUMERIC um.
Lösung nach 3 Versuchen verfügbar