Menu
Coddy logo textTech

Uprość zapytania — słowo kluczowe WITH

Część sekcji Podstawy ścieżki SQL w Coddy. Lekcja 49 z 72.

Zapytania mogą stać się zbyt skomplikowane, gdy dodaje się do nich wiele zapytań wewnętrznych. Oto na przykład zapytanie zawierające wiele podzapytań:

SELECT * FROM table1
WHERE col2 IN (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
		SELECT col5 FROM table3
		WHERE col1 AND col3 OR col2
	)
)

Aby było łatwiej, możemy użyć słowa kluczowego WITH query_name AS (...). Pozwala ono zapisać zapytanie pod nazwą i używać go w dowolnym miejscu:

WITH query1 AS (
	SELECT col5 FROM table3
	WHERE col1 AND col3 OR col2
), query2 AS (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN (SELECT col1 FROM query2) AND col4 IN (SELECT col5 FROM query1)

Tutaj ponownie użyliśmy query1 w query2 oraz w głównym zapytaniu.

challenge icon

Wyzwanie

Łatwy

Dostępne tabele i kolumny:

  • devices_specs: device_id, width, height, num_features, opinion
  • devices_score: device_id, score

napisz zapytanie, które:

  1. Najpierw identyfikuje „duże urządzenia” (urządzenia o wartości width większej niż 200)
  2. Następnie oblicza średnią ocenę tych dużych urządzeń. Nazwij tę kolumnę average_score

Użyj klauzuli WITH, aby rozwiązać ten problem.

Spróbuj swoich sił

-- Krok 1: nazwij tymczasowy zbiór wyników zawierający tylko interesujące Cię urządzenia
WITH large_devices AS (
    SELECT ____
    FROM devices_specs
    WHERE ____
)
-- Krok 2: użyj ponownie tego tymczasowego zbioru wyników w zapytaniu głównym
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online SQL