Menu
Coddy logo textTech

Simplify queries, WITH keyword

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy. Lektion 49 von 72.

Abfragen können sehr unübersichtlich werden, wenn man viele verschachtelte Abfragen hinzufügt. Hier ist zum Beispiel eine Abfrage, die viele Unterabfragen enthält:

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
	)
)

Um es einfacher zu machen, können wir das Schlüsselwort WITH query_name AS (...) verwenden. Es ermöglicht uns, eine Abfrage unter einem Namen zu speichern und sie überall dort zu verwenden, wo wir möchten:

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)

Hier haben wir query1 in query2 und in der Hauptabfrage wiederverwendet.

challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • <strong>devices_specs</strong>: <strong>device_id</strong>, <strong>width</strong>, <strong>height</strong>, <strong>num_features</strong>, <strong>opinion</strong>
  • <strong>devices_score</strong>: <strong>device_id</strong>, <strong>score</strong>

Schreibe eine Abfrage, die:

  1. Zuerst "große Geräte" identifiziert (Geräte mit width größer als 200)
  2. Anschließend den durchschnittlichen Score für diese großen Geräte berechnet. Benenne diese Spalte als average_score

Verwende die WITH-Klausel, um dieses Problem zu lösen.

Probier es selbst

-- Schritt 1: benenne eine temporäre Ergebnismenge, die nur die Geräte behält, die dich interessieren
WITH large_devices AS (
    SELECT ____
    FROM devices_specs
    WHERE ____
)
-- Schritt 2: verwende diese temporäre Ergebnismenge in der Hauptabfrage wieder
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: SQL-Playground