mySql HowTo: Verwendung von IF-Statements

mySql

 

Durch die Verwendung der IF()-Funktion in mySQL kann man sich oftmals weitere unnötige Abfragen sparen. In diesem kleinen HowTow möchte ich dies kurz an ein paar einfachen Beispielen zeigen, auch in Verwendung mit weiteren Funktionen, hier im konkreten Fall mit SUM(). Ich denke, das reicht aus, um das Prinzip leicht zu verstehen.

Generelle Syntax von IF():
SELECT IF (2 > 1, 'das ist wahr', 'das ist falsch')

Die Funkion hat also 3 Parameter. Der erste ist die Bedingung, der zweite der Wert, der zurückgegeben wird, wenn die Bedingung wahr ist und der dritte der Wert, der zurückgegeben wird, wenn die Bedingung falsch ist.
In obigem Beispiel ist die Bedingung ist wahr, deshalb wir also der erste Wert ausgegeben.

Beispiel 2:
SELECT IF (2 = 1, 'das ist wahr', 'das ist falsch')

Die Bedingung ist nun falsch, deshalb wir der zweite Wert ausgegeben.

Beispiel 3:
Wenn wir uns nun vorstellen, dass wir eine Tabelle haben, in der Kunden erfasst sind, die deren Stammdaten auch das Land, in dem sie wohnen, erfasst ist, dann wäre eine sinnvolle Abfrage, wieviel Kunden aus Deutschland bzw. wieviele Kunden aus dem Ausland kommen. Das könnten wir mit einem Count in 2 Abfragen mit where-Bedingung leicht herausfinden, es geht aber auch eleganter in einem Rutsch. Das sähe dann ungefähr so aus:

SELECT SUM(IF(country = 'Deutschland',1,0)) as kunden_deutsch,
SELECT SUM(IF(country != 'Deutschland',1,0)) as kunden_international
FROM customers

Beispiel 4:
Wir haben eine Tabelle mit Produkten aus verschiedenen Kategorien, auch der Preis ist hinterlegt in den Produktdaten.
Es gibt bei uns eine magische Grenze von 20 Euro, alles was über dieser Grenze liegt, wird von unseren Kunden als teuer eingestuft, alles was darunter liegt, wirkt auf unsere Kunden preiswert.
Es wäre schön, wenn wir nun schnell rausfinden könnten, wieviele preiswerte und wieviele teure Produkte es gibt. Diese Information möchten wir natürlich auch pro Kategorie visualisieren.

SELECT category
SUM(IF(price <= 20,1,0)) as preiswert,
SUM(IF(price > 20,1,0)) as teuer
FROM products
GROUP BY category

Das Ergebnis gibt die Summe der preiswerten und teuren Produkte gruppiert nach Kategorie aus.