Hallo und willkommen in unserem Blog zur Beherrschung der HAVING-Anweisung in BigQuery! Wenn Sie mit SQL vertraut sind, kennen Sie wahrscheinlich die WHERE-Klausel, aber heute beschäftigen wir uns mit ihrem leistungsstarken Gegenstück für aggregierte Daten: der HAVING-Anweisung. Dieses Tutorial führt Sie durch das Verständnis der HAVING-Anweisung und ihrer Unterschiede zur WHERE-Klausel und bietet praktische Beispiele, um Ihr Gelerntes zu festigen. Wenn Sie noch nicht mit SQL vertraut sind oder eine Auffrischung der GROUP BY- und Aggregationsfunktionen benötigen, sollten Sie sich unbedingt unsere vorherigen Tutorials ansehen, da sie die Grundlage für diese Lektion bilden.
Die HAVING-Anweisung ist wichtig, um Ergebnisse zu filtern, nachdem die Daten aggregiert wurden. Dies ist besonders nützlich, wenn Sie aggregierten Daten Bedingungen auferlegen möchten. Lassen Sie uns die Funktionalität aufschlüsseln und anhand von Beispielen veranschaulichen.
Fangen wir mit einer einfachen Abfrage an:
SELECT
start_station_name,
SUM(duration_sec) AS total_duration,
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
GROUP BY 1
ORDER BY 2 DESC
Diese Abfrage aggregiert die Daten aus dem bikeshare_trips
Tabelle von Name der Startstation
, wobei die Gesamtdauer der Fahrten für jede Station zusammengefasst wird. Es gruppiert die Ergebnisse nach Name der Startstation
und ordnet sie in absteigender Reihenfolge basierend auf Gesamtdauer
.
Im Ergebnis:
Um bestimmte Datensätze zu analysieren oder ungewöhnliche Einträge auszuschließen, müssen Sie auf der Grundlage aggregierter Ergebnisse filtern. Wenn Sie beispielsweise nur Sender mit einer Gesamtdauer von über 500.000 Sekunden anzeigen möchten, könnten Sie eine WHERE-Klausel wie diese verwenden:
SELECT
start_station_name,
SUM(duration_sec) AS total_duration,
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
WHERE total_duration > 500000
GROUP BY 1
ORDER BY 2 DESC
Diese Abfrage versucht, WHERE zu verwenden, um Ergebnisse basierend auf Gesamtdauer
, was ein aggregierter Wert ist. Dies führt jedoch zu einem Fehler, da die WHERE-Klausel vor der Aggregation angewendet wird (d. h. vor Gesamtdauer
wird berechnet). Die WHERE-Klausel erkennt das nicht Gesamtdauer
da es erst nach der GROUP BY-Operation existiert.
Anstatt WHERE zu verwenden, sollten Sie die HAVING-Klausel verwenden, um die Ergebnisse nach der Aggregation zu filtern:
SELECT
start_station_name,
SUM(duration_sec) AS total_duration,
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
GROUP BY 1
HAVING total_duration > 500000
ORDER BY 2 DESC
In dieser Abfrage:
Name der Startstation
und berechne Gesamtdauer
unter Verwendung von SUM (Dauer_Sekunde)
.HABEN
Eine Klausel wird dann verwendet, um die gruppierten Ergebnisse so zu filtern, dass sie nur die Stationen enthalten, bei denen Gesamtdauer
überschreitet 500.000 Sekunden.Gesamtdauer
in absteigender Reihenfolge.
SELECT
start_station_name,
SUM(duration_sec) AS total_duration,
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
GROUP BY 1
HAVING total_duration > 50000000
ORDER BY 2 DESC
SELECT
start_station_name,
SUM(duration_sec) AS total_duration,
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
GROUP BY 1
HAVING total_duration BETWEEN 50000 AND 80000
ORDER BY 2 DESC
Die HAVING-Anweisung ist ein leistungsstarkes Tool in SQL zum Filtern aggregierter Daten und bietet Funktionen, die die WHERE-Klausel nicht bietet. Durch die Nutzung von HAVING können Sie komplexe Bedingungen auf Ihre gruppierten Daten anwenden und genauere Ergebnisse in Ihren Abfragen erzielen. Üben Sie, die bereitgestellten Beispiele zu verwenden, um Ihr Verständnis zu verbessern, und besuchen Sie unsere [Website] (#) für weitere Tutorials und Ressourcen. Vergessen Sie nicht, diesen Blog zu liken, unseren YouTube-Kanal zu abonnieren und bleiben Sie dran, um weitere SQL-Tipps und -Tricks zu erhalten. Viel Spaß beim Abfragen!