Grundlegendes zur BigQuery HAVING Anweisung

August 23, 2024
Kapitel 7: Die BigQuery-HAVING-Anweisung verstehen

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 Erklärung verstehen

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.

1. Unterschied zwischen WO und HABEN

  1. WHERE-Klausel: Filtert Zeilen, bevor Gruppierungen vorgenommen werden.
  2. HAVING-Klausel: Filtert Gruppen, nachdem der GROUP BY-Vorgang ausgeführt wurde.

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:

  • Harry Bridges Plaza erscheint oben in der Liste und gibt an, dass sie die höchste Gesamtreisedauer unter allen Stationen hat.
  • Umgekehrt 5th Street in der E. San Salvador St erscheint weiter unten in der Liste und zeigt an, dass es unter den Top-Einträgen die niedrigste Gesamtdauer hat.

2. Praktisches Beispiel: Filtern der Namen der Startstationen

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:

  • Wir gruppieren die Daten zunächst nach Name der Startstation und berechne Gesamtdauer unter Verwendung von SUM (Dauer_Sekunde).
  • Das 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.
  • Schließlich sind die Ergebnisse geordnet nach Gesamtdauer in absteigender Reihenfolge.
Abfrage mit HAVING-Klausel


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

Fazit

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!

Abonnieren Sie unseren Newsletter
Danke! Deine Einreichung ist eingegangen!
Hoppla! Beim Absenden des Formulars ist etwas schief gelaufen.