Przejdź do głównej treści
eLearner.app
Moduł 14 · Lekcja 2 z 354/57 w kursie~15 min
Lekcje modułu (2/3)

Wielokrotne i łańcuchowe CTE

Wiele i połączone CTE

Elegancja wyrażeń WITH naprawdę błyszczy, gdy połączysz kilka razem. Można zdefiniować wiele CTE z rzędu, oddzielając je przecinkiem.

A oto coś, co uwielbiają puryści zajmujący się refaktoryzacją: późniejsze CTE mogą czytać dane z wcześniejszych CTE, rozpakowując sekwencyjne obliczenia kawałek po kawałku!

Przykład wielu CTE

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
),
top_customers AS (
  SELECT * FROM premium_customers
  WHERE total_spent > 5000
)
SELECT c.first_name, tc.total_spent
FROM customers c
JOIN top_customers tc ON c.id = tc.customer_id;

To programowanie w stylu blokowym! Każdy blok wykonuje tylko jedno zadanie.

Ćwiczenie#sql.m14.l2.e1
Próby: 0Ładowanie...

Zdefiniuj dwa kolejne CTE: 1) „suma_zamówień” oblicza „id_klienta” i „liczba_zamówień” złożone przy użyciu `COUNT(*)` z „zamówień”. 2) „gold_users” odczytuje z „sumy_zamówień” filtrujących klientów z „liczba_zamówień >= 2”. Na koniec DOŁĄCZ do tabeli „klienci” (wyodrębniając „imię” i „last_name”) z „gold_users” (ON c.id = g.customer_id), a także pokaż ich „order_count”.

Ładowanie edytora...
Pokaż wskazówkę

Oddziel Order_totals i gold_users przecinkiem (bez sekundy Z!)

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m14.l2.e2
Próby: 0Ładowanie...

Teraz użyjmy wielu CTE, aby uprościć metryki: Utwórz „max_price” (wyodrębnia pojedynczy wiersz z „max_value” przy użyciu `MAX(unit_price)` z „order_items”). W głównym zapytaniu wyodrębnij wszystkie „product_id” i „jednostkowa cena” z „order_items” i pokaż, jak bardzo różnią się one od ceny maksymalnej, obliczając „(SELECT max_value FROM max_price) - unit_price AS różnica”. Brak łączenia — użyj podzapytania na CTE, aby uzyskać pojedynczą wartość!

Ładowanie edytora...
Pokaż wskazówkę

Z ceną maksymalną AS (...) WYBIERZ identyfikator_produktu, cenę_jednostkową, (WYBIERZ wartość_maksymalną Z ceny_maksymalnej) - cena_jednostkowa Z pozycji_zamówienia;

Rozwiązanie dostępne po 3 próbach