24th Nov 2022 8 Leseminuten Wie man die Funktion COALESCE() in SQL verwendet Ignacio L. Bisso NULL Inhaltsverzeichnis Was bewirkt COALESCE()? Lernen Sie die Beispieldaten kennen Beispielhafte SQL-Abfragen mit der Funktion COALESCE() Beispiel 1: Verwendung von COALESCE() zum Ersetzen von NULL durch ein Label Beispiel 2: Verwendung von COALESCE() bei der Verkettung von NULL und Strings Beispiel 3: Verwendung von COALESCE() mit mehreren Argumenten Beispiel 4: Verwendung von COALESCE() zum Ersetzen von NULL durch einen berechneten Wert Beispiel 5: Verwendung von COALESCE() mit der ROLLUP-Klausel Nutzen Sie COALESCE() zur Verarbeitung von NULL-Werten SQL-Benutzer werden oft mit NULL-Werten in ihren Abfragen konfrontiert und müssen diese richtig verarbeiten. Die Funktion COALESCE() hilft bei der Handhabung von NULL-Werten. Lesen Sie diesen Artikel, um zu erfahren, wie Sie COALESCE() in Ihren Abfragen verwenden können. SQL-Tabellen speichern Daten in Datensätzen, und Datensätze bestehen aus Feldern. Es kann Situationen geben, in denen wir den Wert für ein bestimmtes Feld nicht kennen. Nehmen wir zum Beispiel an, wir haben eine Tabelle mit Daten für persons. Sie enthält die Felder first_name, last_name und marital_status. Wenn wir die marital_status für eine bestimmte Person nicht kennen, können wir mit SQL einen NULL-Wert für dieses Feld zuweisen. Der NULL-Wert bedeutet jedoch nicht, dass die Person kein marital_status hat; er bedeutet nur, dass wir diesen Wert nicht kennen". Mit anderen Worten: SQL verwendet NULL-Werte, um das Fehlen eines Wertes darzustellen. NULL-Werte können jedoch schwierig zu handhaben sein. Deshalb hat SQL die Funktion COALESCE() eingeführt, über die wir in diesem Artikel sprechen werden. Bevor wir uns mit den technischen Details von NULL und COALESCE() befassen, empfehle ich Ihnen unseren interaktiven Kurs über Standard-SQL-Funktionen. Er enthält einen umfassenden Überblick über NULL-Werte, NULL-bezogene Funktionen und andere gängige Funktionen in SQL. Was bewirkt COALESCE()? In SQL-Datenbanken lässt jeder Datentyp NULL als gültigen Wert zu, d.h. jede Spalte kann einen NULL-Wert haben, unabhängig davon, um welchen Datentyp es sich handelt. (Natürlich sind einige Spalten obligatorisch (nicht-nullbar), aber das wird vom Datenbankdesigner festgelegt, nicht vom Datentyp selbst.) Lassen Sie uns ein einfaches Beispiel anhand der Tabelle persons. first_namelast_namemarital_status CharlesLeclercsingle FernandoAlonsomarried GeorgeGraueNULL Wir können die SQL-Funktion COALESCE() verwenden, um den NULL-Wert durch einen einfachen Text zu ersetzen: SELECT first_name, last_name, COALESCE(marital_status,'Unknown') FROM persons In der obigen Abfrage wird die Funktion COALESCE() verwendet, um den Wert 'Unknown' nur dann zurückzugeben, wenn marital_status NULL ist. Wenn marital_status nicht NULL ist, gibt COALESCE() den Wert der Spalte marital_status zurück. Mit anderen Worten: COALESCE() gibt das erste Nicht-NULL-Argument zurück. Lernen Sie die Beispieldaten kennen Für den Rest des Artikels werden wir die Funktion COALESCE() anhand der Tabelle stockdemonstrieren, die unten abgebildet ist. productbrandsubcategorycategoryfamilyunitsquantity_availableminimum_to_have pork ribsNULLpork meatmeatfoodKilos400130 tomatoesMr RedNULLvegetablesfoodKilos280100 lettuceNULLLeaf vegetablesNULLfoodKilos280125 bananasBig BrasilNULLvegetablesfoodKilos450150 hamburgerMaxBurgcow meatmeatfoodBox245100 hamburgerRoyalBurgcow meatmeatfoodBox125NULL hamburgerSuperBurgaNULLNULLNULLBox20080 Diese Tabelle speichert Produktdatensätze für einen Marktplatz und enthält die Spalten product, brand, subcategory, category, family, units, quantity_available (der aktuelle Bestand dieses Produkts) und minimum_to_have (der Schwellenwert, ab dem der Markt dieses Produkt bei seinen Lieferanten bestellen muss). Sie werden feststellen, dass einige der Produkte eine Unterkategorie haben, andere jedoch nicht. Zum Beispiel gehört das Produkt "Schweinerippchen" zur Unterkategorie "Schweinefleisch" in der Kategorie "Fleisch" und der Familie "Lebensmittel". Das Produkt "Tomaten" gehört zur Kategorie "Gemüse" und zur Familie "Lebensmittel"; es hat keine Unterkategorie, daher steht in diesem Feld NULL. Beispielhafte SQL-Abfragen mit der Funktion COALESCE() Sehen wir uns nun an, wie die Funktion COALESCE() in einigen realistischen Beispielen verwendet werden kann. Beispiel 1: Verwendung von COALESCE() zum Ersetzen von NULL durch ein Label Wir möchten alle Produkte mit ihrer Unterkategorie, Kategorie und Familie anzeigen. Es gibt jedoch einige Produkte mit NULL in ihrer Kategorie oder Unterkategorie. Für diese Produkte möchten wir einen Text anzeigen: 'No Category' oder 'No Subcategory'. Hier ist die Abfrage, die wir verwenden würden: SELECT product, COALESCE(subcategory,'No Subcategory') AS subcategory, COALESCE(category,'No Category') AS category, COALESCE(family,'No Family') AS family FROM stock Wir verwenden die Funktion COALESCE(), um NULL-Werte durch einen Text zu ersetzen. Das Ergebnis können Sie unten sehen: productsubcategorycategoryfamily pork ribspork meatmeatfood tomatoesNo Subcategoryvegetablesfood lettuceLeaf vegetablesNo Categoryfood bananasNo Subcategoryvegetablesfood hamburgercow meatmeatfood hamburgercow meatmeatfood hamburgerNo SubcategoryNo CategoryNo Family Beispiel 2: Verwendung von COALESCE() bei der Verkettung von NULL und Strings Ein häufiges SQL-Problem im Zusammenhang mit NULL-Werten ist die String-Verkettung. Viele Operationen, die NULL-Werte beinhalten, geben als Ergebnis NULL zurück. Wenn wir zwei Strings verketten wollen und einer davon NULL ist, wird das Ergebnis der Verkettung NULL sein. Hier ist eine einfache Textkonkatenation: SELECT 'Hello, how are you ' || 'Peter ' || '?' AS example Sie gibt zurück: example Hello, how are you Peter ? Wenn wir jedoch einen NULL-Wert verwenden ... SELECT 'Hello, how are you ' || null || '?' AS example ... erhalten wir: example NULL Das Ergebnis ist NULL, da jede Verkettung von Textstrings mit einem NULL-Wert einen NULL-Wert ergibt. Um dies zu vermeiden, können wir die Funktion COALESCE() verwenden, um eine leere Zeichenkette (oder ein Leerzeichen) anstelle eines NULL-Wertes zurückzugeben. Nehmen wir zum Beispiel an, wir wollen eine Liste der Produktnamen mit dem Markennamen. Wir können die folgende Abfrage schreiben: SELECT product || ', brand: ' || COALESCE(brand, '--') AS product_brand FROM stock Wenn eine Marke NULL ist, setzen wir ein '--' anstelle von NULL ein. Beachten Sie das Ergebnis: product_brand pork ribs, brand: -- tomatoes, brand: Mr Red lettuce, brand: -- bananas, brand: Big Brazil hamburger, brand: MaxBurg hamburger, brand: RoyalBurg hamburger, brand: SuperBurga Beispiel 3: Verwendung von COALESCE() mit mehreren Argumenten Sie können die Funktion COALESCE() mit mehr als zwei Argumenten verwenden. Angenommen, wir möchten einen Bericht erstellen, der Produkte und ihre Unterkategorien auflistet. Wenn die Unterkategorie NULL ist, wollen wir die Unterkategorie durch die Kategorie ersetzen. Und wenn sowohl Unterkategorie als auch Kategorie NULL sind, wollen wir sie durch die Produktfamilie ersetzen. Schauen wir uns die SQL-Abfrage an: SELECT product ||' - '|| COALESCE(subcategory, category, family, 'no product description ') AS product_and_subcategory FROM stock Wir verwenden die Funktion COALESCE() mit vier Argumenten; das erste Nicht-NULL-Argument wird zurückgegeben, wie wir im untenstehenden Ergebnis sehen können: product_and_subcategory pork ribs - pork meat tomatoes - vegetables lettuce - leaf vegetables Bananas - vegetables hamburger - cow meat hamburger - cow meat hamburger - no product description Für weitere Details hierzu empfehle ich den Artikel How to Tackle SQL NULLs. Beispiel 4: Verwendung von COALESCE() zum Ersetzen von NULL durch einen berechneten Wert Die SQL-Funktion COALESCE() kann auch verwendet werden, um einen Wert zu berechnen oder zu schätzen, wenn dieser Wert nicht vorhanden ist. Zum Beispiel hat jedes Produkt einen Schwellenwert (dargestellt durch die Spalte minimum_to_have), der eine neue Bestellung beim Lieferanten erfordert. Einige Datensätze könnten jedoch einen NULL-Wert in der Spalte minimum_to_have haben; in diesem Fall können wir festlegen, dass der Schwellenwert 50% der Spalte quantity_available beträgt. Die Abfrage zur Berechnung des geschätzten Schwellenwerts lautet: SELECT product, quantity_available, minimum_to_have, COALESCE(minimum_to_have, quantity_available * 0.5) AS threshold FROM stock Die Funktion COALESCE() gibt hier minimum_to_have zurück, wenn der Wert minimum_to_have nicht NULL ist. Wenn minimum_to_have NULL ist, wird COALESCE() zurückgegeben. quantity_available * 0.5 productquantity_availableminimum_to_havethreshold pork ribs400130130 tomatoes280NULL140 lettuce280125125 bananas450150150 hamburger245100100 hamburger125100100 hamburger2008080 Beispiel 5: Verwendung von COALESCE() mit der ROLLUP-Klausel Im nächsten Beispiel verwenden wir die ROLLUP Klausel (eine Erweiterung von GROUP BY), um die Gesamtmenge der Produkte zu erhalten, die wir für jede Unterkategorie haben, einschließlich einer Zwischensumme der Produkte für jede Kategorie und Familie. Schauen wir uns die Abfrage an: SELECT family, category, subcategory, SUM(quantity_available) as quantity_in_stock FROM stock GROUP BY ROLLUP(family, category, subcategory) ORDER BY family, category, subcategory Die Klausel ROLLUP geht von einer Hierarchie zwischen den Spalten family, category und subcategory aus. Daher erzeugt sie alle Gruppierungssätze, die unter Berücksichtigung der Hierarchie sinnvoll sind: GROUP BY family, GROUP BY family, category und GROUP BY family, category, subcategory. Dies ist der Grund, warum ROLLUP häufig verwendet wird, um Zwischensummen und Gesamtsummen für Berichte zu erzeugen. Schauen wir uns die Ergebnisse unten an: familycategorysubcategoryquantity_in_stock foodmeatcow meat570 foodmeatpork meat400 foodmeatNULL970 foodvegetablesleaf vegetables280 foodvegetablesnon leaf vegetables730 foodvegetablesNULL1010 foodNULLNULL1980 NULLNULLNULL1980 Sie können einige NULLs in dem vorherigen Ergebnis sehen. Jeder NULL-Wert bedeutet, dass diese Spalte in der GROUP BY für die Berechnung der Bestandsmenge nicht vorhanden war. Zum Beispiel sind diese Zeilen ... foodmeatNULL770 foodvegetablesNULL1010 ... sind das Ergebnis der Ausführung von GROUP BY family, category. Dies ist der Grund dafür, dass unter der Spalte subcategory eine NULL steht. In der nächsten Abfrage werden wir die Funktion COALESCE() verwenden, um die Lesbarkeit des Berichts zu verbessern. Wir werden diese NULL-Werte durch einen Text ersetzen, der den Grund für die NULL verdeutlicht: SELECT COALESCE(family,'All Families') AS family, COALESCE(category,'All Categories') AS category, COALESCE(subcategory,'All Subcategories') AS subcategory, SUM(quantity_available) as quantity_in_stock FROM stock GROUP BY ROLLUP(family, category, subcategory) ORDER BY family, category, subcategory Das Ergebnis ist: familycategorysubcategoryquantity_in_stock foodmeatCow meat570 foodmeatPork meat400 foodmeatAll Sub-Categories970 foodvegetablesLeaf vegetables280 foodvegetablesNon leaf vegetables730 foodvegetablesAll Subcategories1010 foodAll CategoriesAll Subcategories1980 All FamiliesAll CategoriesAll Subcategories1980 Im vorherigen Ergebnis können wir beobachten, wie die NULL-Werte durch Texte ersetzt werden und die Zeilen der Berichte mit den Texten, die mit 'All' beginnen, eine Zwischensumme in quantity_in_stock anzeigen. Ich möchte Ihnen den Artikel Die SQL-Funktion COALESCE empfehlen : Handling NULL Values, wenn Sie mehr darüber erfahren möchten. Nutzen Sie COALESCE() zur Verarbeitung von NULL-Werten In diesem Artikel haben wir mehrere Möglichkeiten zur Verwendung der SQL-Funktion COALESCE() gezeigt. Wir haben unter anderem gezeigt, wie Sie COALESCE() verwenden, um NULL-Werte zu ersetzen, wie Sie einen alternativen Wert berechnen und wie Sie COALESCE() mit der ROLLUP-Klausel kombinieren. Bevor ich zum Schluss komme, habe ich noch eine Empfehlung für Sie. Mit unserem kostenlosen Standard-SQL-Funktionen Cheat Sheet können Sie schnell Details über die eingebauten SQL-Funktionen, Aggregatfunktionen und mehr finden. Ich benutze es fast jeden Tag, wenn ich mit SQL arbeite. Sie können auch unseren Standard-SQL-Funktionen Kurs ausprobieren, in dem Sie numerische, Text-, Datums- und NULL-Funktionen von SQL lernen und üben können. Verbessern Sie Ihre Fähigkeiten und steigern Sie Ihr Vermögen! Tags: NULL