Kurs
Die SQL-Funktion DECODE() verstehen
Die Fähigkeit, bedingte Logik direkt in SQL-Abfragen zu implementieren, ist für Data Scientists und Data Engineers unerlässlich. Dieses Tutorial bietet eine umfassende Anleitung zur Verwendung der Funktion SQL DECODE()
in Oracle. Außerdem vergleiche ich DECODE()
mit CASE WHEN
in Oracle und zeige dir, wann du welche Funktion verwenden solltest. Schließlich werde ich Code für die entsprechenden Transformationen in SQL Server, PostgreSQL und MySQL bereitstellen.
Bevor wir uns die praktischen Beispiele ansehen, empfehle ich dir, den Kurs Einführung in Oracle SQL von DataCamp zu besuchen, um deine Kenntnisse im Umgang mit dem PL/SQL-Dialekt aufzufrischen. Unser SQL-Kurs für Fortgeschrittene vermittelt dir außerdem die fortgeschrittenen SQL-Kenntnisse, die du brauchst, wenn du Abfragen mit der Funktion DECODE()
bearbeitest, denn wie wir sehen werden, wird DECODE()
oft mit einer fortgeschritteneren Syntax verwendet, z. B. mit Unterabfragen.
Wie man die SQL-Funktion DECODE() verwendet
Die Funktion SQL DECODE()
wird in der Oracle-Datenbank nativ unterstützt und ist im PL/SQL-Dialekt verfügbar. Die Funktion DECODE()
ermöglicht die Implementierung von bedingter Logik innerhalb der Abfrage. Diese Technik ist wichtig, denn sie hilft bei der Datenumwandlung, wenn du Datensätze aus der Datenbank abrufst.
Betrachte die folgende Tabelle employees
, in der department_id
numerische Werte hat. Stattdessen wollen wir, dass department_id
department_name
genannt wird und verständlichere Kategorien hat.
Beispieltabelle zur Umwandlung mit der SQL-Funktion DECODE(). Bild vom Autor.
Das folgende Beispiel zeigt, wie du die Funktion DECODE()
verwendest, um die department_id
in die tatsächlichen Namen umzuwandeln.
-- Using DECODE to transform department_id to department_name
SELECT
employee_id,
first_name,
last_name,
DECODE(department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales',
'Unknown') AS department_name,
salary,
hire_date,
city
FROM employees;
Beispiel einer Ausgabetabelle nach Verwendung der SQL-Funktion DECODE(). Bild vom Autor.
Die SQL-Funktion DECODE() verstehen
Die Funktion DECODE()
ist in der Oracle-Datenbank verfügbar und ermöglicht es dir, eine Spalte mithilfe einer bedingten Logik umzuwandeln. Die Funktion DECODE()
ermöglicht mehrere bedingte Umwandlungen mit einer einfachen Abfrage.
Die Syntax der Funktion DECODE()
sieht wie folgt aus:
DECODE(expression, search1, result1, search2, result2, ..., default)
Wo:
-
expression
: Der zu vergleichende Wert. -
search
: Der Wert, der mit dem Ausdruck verglichen werden soll. -
result
: Der Wert, der zurückgegeben wird, wenn der Ausdruck mit dem Suchwert übereinstimmt. -
default
: Der Wert, der zurückgegeben wird, wenn keine Übereinstimmung gefunden wird (optional).
Fortgeschrittene Techniken und Überlegungen mit der SQL-Funktion DECODE()
Einige erweiterte SQL-Operationen können mit der Funktion DECODE()
durchgeführt werden. Die fortgeschrittenen Techniken ermöglichen eine komplexere Umwandlung der bedingten Logik.
DECODE() mit Aggregatfunktionen
Die Funktion DECODE()
in Oracle kann in der Anweisung SELECT
verwendet werden, um eine Variable neu zu kategorisieren, und sie kann auch in der Anweisung SELECT
mit Aggregatfunktionen für eine kompliziertere Gruppierung verwendet werden, was die Flexibilität und Interpretation der Ergebnisse weiter verbessert.
In der folgenden Abfrage verwenden wir DECODE()
, um department_id
in department_name
umzuwandeln. Wir verwenden DECODE()
auch, um das Durchschnittsgehalt in "hochbezahlte" und "niedrigbezahlte" Gehälter einzuteilen.
SELECT
department_id,
-- Use DECODE to transform department_id into department_name
DECODE(
department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales',
'Unknown'
) AS department_name,
SUM(salary) AS total_salary,
-- Calculate the average salary for each department and round to nearest integer
ROUND(AVG(salary), 0) AS average_salary,
-- Use DECODE to categorize average salary into 'High Paying' or 'Low Paying'
DECODE(
SIGN(AVG(salary) - 65000),
1, 'High Paying',
0, 'High Paying',
-1, 'Low Paying'
) AS salary_category
FROM
employees
GROUP BY
department_id;
Beispiel für die Ausgabe einer Tabelle nach Verwendung mehrerer SQL DECODE()-Funktionen. Bild vom Autor
Verschachtelte DECODE()-Anweisungen
Wenn du die Funktion DECODE()
mit Unterabfragen implementierst, kannst du anspruchsvolle logische Transformationen der Daten durchführen. Die geschachtelte DECODE()
Anweisung in Oracle hilft, wenn wir mehrere Bedingungen in einer Tabelle auswerten wollen.
Im folgenden Beispiel haben wir die verschachtelte Anweisung DECODE()
verwendet, um die Mitarbeiter nach ihrer Abteilung und ihrem Gehalt zu kategorisieren.
-- Select the columns
SELECT
employee_id,
first_name,
last_name,
department_id,
salary,
-- Use DECODE to categorize salary based on department and salary thresholds
DECODE(department_id,
1, DECODE( -- If department_id is 1 (IT)
CASE
WHEN salary > 65000 THEN 'High'
ELSE 'Low'
END,
'High', 'IT High Salary',
'Low', 'IT Low Salary'
),
2, DECODE( -- If department_id is 2 (HR)
CASE
WHEN salary > 55000 THEN 'High'
ELSE 'Low'
END,
'High', 'HR High Salary',
'Low', 'HR Low Salary'
),
3, DECODE( -- If department_id is 3 (Finance)
CASE
WHEN salary > 70000 THEN 'High'
ELSE 'Low'
END,
'High', 'Finance High Salary',
'Low', 'Finance Low Salary'
),
4, DECODE( -- If department_id is 4 (Marketing)
CASE
WHEN salary > 68000 THEN 'High'
ELSE 'Low'
END,
'High', 'Marketing High Salary',
'Low', 'Marketing Low Salary'
),
5, DECODE( -- If department_id is 5 (Sales)
CASE
WHEN salary > 60000 THEN 'High'
ELSE 'Low'
END,
'High', 'Sales High Salary',
'Low', 'Sales Low Salary'
),
'Unknown Department' -- Default value if department_id does not match any case
) AS salary_category
FROM
employees;
Beispiel für die Ausgabe einer Tabelle nach Verwendung der verschachtelten DECODE()-Funktion. Bild vom Autor
Wie DECODE() NULL-Werte behandelt
Die Funktion DECODE()
behandelt die Werte von NULL
auf zwei verschiedene Arten. Zum einen verhält sich DECODE()
so, als ob zwei NULL
Werte gleichwertig sind. Diese Funktionalität bedeutet, dass die Werte von NULL
als übereinstimmend angesehen werden, wenn die Spaltenwerte mit NULL
verglichen werden. Dennoch solltest du auf unerwartete Ergebnisse achten, wenn die NULL
nicht explizit berücksichtigt wird, da sie die NULL
Werte während der Transformation verdecken kann.
Außerdem solltest du wissen, dass die Funktion DECODE()
genau wie die Anweisung CASE WHEN einen Wert NULL
zurückgibt, wenn keine Übereinstimmung gefunden wird.
Das folgende Beispiel zeigt, wie die Funktion DECODE()
Nullwerte zurückgibt, wenn department_id
und salary
fehlen.
-- Select columns
SELECT
employee_id,
first_name,
last_name,
department_id,
salary,
-- Determine the salary category based on the salary value
DECODE(salary,
NULL, 'No Salary Information',
60000, 'Standard Salary',
'Other Salary') AS salary_category,
-- Determine the department name based on the department ID
DECODE(department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales') AS department_name
-- If department_id does not match any of the above, return NULL
FROM
employees;
Beispiel für die Ausgabe einer Tabelle nach der Verwendung von DECODE() zur Behandlung von NULL-Werten. Bild vom Autor
DECODE vs. CASE WHEN in Oracle
Die Funktion DECODE()
war die erste, die eingeführt wurde, und obwohl sie durch die Anweisung CASE WHEN
ersetzt wurde, wird sie in manchen Zusammenhängen immer noch bevorzugt. Die Funktionssyntax von DECODE()
ist zum Beispiel einfacher. Wenn die Logik also recht einfach ist, ist sie leichter zu lesen und zu verstehen.
Außerdem ist die Funktion DECODE()
in der Regel schneller, da ihre Leistung als eingebaute Funktion optimiert wurde, auch wenn der Unterschied vernachlässigbar sein mag. In älteren Oracle-Systemen musst du unter Umständen die Funktion DECODE()
als integrierte Funktion verwenden.
Alternativen zu DECODE() in anderen Datenbanken
Die Funktion DECODE()
wird nur in der Oracle-Datenbank unterstützt. SQL Server, PostgreSQL und MySQL bieten jedoch alternative Methoden für die Anwendung bedingter Datenumwandlungslogik.
Die Funktion DECODE()
ist bei der Datenumwandlung nützlich, da sie die komplexe Logik vereinfacht, indem sie die Verwendung von IF ELSE
oder CASE
Anweisungen überflüssig macht. Die Funktion DECODE()
verbessert außerdem die Lesbarkeit von Abfragen und ermöglicht eine effiziente Datenmanipulation. Schauen wir uns die verschiedenen Anwendungsfälle der Funktion DECODE()
an.
Verwendung von CASE WHEN in SQL Server, PostgreSQL und MySQL
Die Anweisung CASE WHEN
bietet eine Alternative zur Funktion DECODE()
, um die bedingte Logikumwandlung von SQL durchzuführen. Die Syntax und Implementierung von CASE WHEN
ist für SQL Server, PostgreSQL und MySQL-Datenbanken einheitlich.
Das folgende Beispiel zeigt, wie du die CASE WHEN
Anweisung verwendest, um Daten innerhalb der SELECT
Anweisung umzuwandeln. Die Abfrage zeigt auch, wie man die Anweisung CASE WHEN
mit anderen SQL-Funktionen für komplexe bedingte Umwandlungen kombinieren kann.
-- Select department ID
SELECT
department_id,
-- Use CASE to transform department_id into department_name
CASE
WHEN department_id = 1 THEN 'IT'
WHEN department_id = 2 THEN 'HR'
WHEN department_id = 3 THEN 'Finance'
WHEN department_id = 4 THEN 'Marketing'
WHEN department_id = 5 THEN 'Sales'
ELSE 'Unknown'
END AS department_name,
SUM(salary) AS total_salary,
-- Calculate the average salary for each department and round to the nearest whole number
ROUND(AVG(salary), 0) AS average_salary,
-- Use CASE to categorize average salary into 'High Paying' or 'Low Paying'
CASE
WHEN AVG(salary) > 65000 THEN 'High Paying'
ELSE 'Low Paying'
END AS salary_category
FROM
employees
GROUP BY
department_id; -- Group results by department ID
Fazit und weiteres Lernen
Das Verständnis der Oracle-Funktion DECODE()
ist wichtig, um zu lernen, wie man Daten effektiv umwandelt. Die Funktion DECODE()
bietet verschiedene Anwendungsfälle für die Anwendung bedingter Logik bei der Datenumwandlung. Es ist auch wichtig, dass du die alternative bedingte Umwandlung in SQL Server-, PostgreSQL- und MySQL-Datenbanken lernst. Ich empfehle dir, die Funktion DECODE()
mit verschiedenen Datensätzen und Anwendungsfällen zu üben, um deine Fähigkeiten zur Datenumwandlung zu verbessern.
Wenn du deine Fähigkeiten in der Datenanalyse verbessern möchtest, empfehle ich dir den Kurs Reporting in SQL von DataCamp, um deine Analyse- und Präsentationsfähigkeiten zu erweitern. Ebenso solltest du dir unseren Lernpfad zum Associate Data Analyst in SQL ansehen, damit du die notwendigen SQL-Kenntnisse für deine Karriere als Datenanalyst/in behältst. Abschließend empfehle ich dir das DataCamp-Projekt " Data-Driven Decision Making in SQL", in dem du zeigen kannst, dass du verschiedene SQL-Techniken für Analysen und Berichte beherrschst, um dich von anderen Datenanalysten abzuheben.
Häufig gestellte Fragen
Was ist die SQL-Funktion DECODE()?
Die SQL DECODE()
ist eine Funktion, die verwendet wird, um bedingte Logik für die Datenumwandlung durchzuführen.
Welche Datenbanken unterstützen die SQL-Funktion DECODE()?
Nur die Oracle-Datenbank unterstützt von Haus aus die Funktion SQL DECODE()
. SQL Server, PostgreSQL und MySQL erlauben eine bedingte Umwandlung mit der Anweisung CASE WHEN
.
Kann ich DECODE() mit anderen SQL-Funktionen verwenden?
Die Oracle-Funktion DECODE()
kann mit anderen SQL-Funktionen wie AVG()
, SUM()
und COUNT()
verwendet werden, um erweiterte bedingte Transformationen durchzuführen.
Kann ich verschachtelte DECODE()-Anweisungen verwenden?
Die Oracle-Datenbanken unterstützen verschachtelte DECODE()
Anweisungen für komplexe Logik. Längere verschachtelte DECODE()
Anweisungen können jedoch schwer zu pflegen und zu lesen sein.
Kann die Funktion DECODE() mit NULL-Werten umgehen?
Die Funktion DECODE()
behandelt die Werte von NULL
als Standard und gibt die Werte von NULL
zurück, wenn die Bedingung bei der Datenumwandlung nicht erfüllt ist.
Welche anderen Funktionen außer DECODE() gibt es bei Oracle?
Zu den weiteren Funktionen, die es nur in der Oracle-Datenbank gibt, gehört NVL()
, das die Werte von NULL
durch bestimmte Werte ersetzt.
SQL lernen mit DataCamp
Kurs
Datengestützte Entscheidungsfindung in SQL
Kurs