Ifnull

Er zijn maar vier personeelsleden die een commission_pct hebben (commissie krijgen). Commissie is een bepaald percentage dat je extra krijgt boven op je loon. Dat percentage kan gaan over de verkopen die je hebt gedaan of gewoon als percentage boven op je loon. Hoe meer je dan verkoopt, hoe hoger je commissiepercentage dan kan worden.

 

SELECT last_name, commission_pct AS commissie

FROM employees;

 

clip0119

 

 

Nu is het dus mogelijk iets anders te laten zien dan NULL in de uitvoer, bijvoorbeeld het woordje "geen".

 

SELECT last_name, IFNULL(commission_pct, 'geen') AS commissie

FROM employees;

 

clip0120

 

 

Als je wil rekenen met de waarden in een kolom die NULL kunnen zijn, dan gaat het mis met de berekeningen. Als je met NULL rekent, is het resultaat namelijk NULL.

 

SELECT last_name, salary, commission_pct AS commissiepercentage, salary * commission_pct AS commissie, salary + salary * commission_pct AS totaalsalaris

FROM employees;

 

clip0122

 

 

Als je NULL vervangt door 0 in de kolom commission_pct gaan de berekeningen wel goed.

 

SELECT last_name, 

 salary AS salaris, 

 IFNULL(commission_pct, 0) AS commissiepercentage, 

 salary * IFNULL(commission_pct, 0) AS commissie, 

 ROUND(salary + salary * IFNULL(commission_pct, 0)) AS totaalsalaris

FROM employees;

 

clip0121

 

 

Tenslotte zetten we nog een procentteken en enkele dollartekens met CONCAT.

 

SELECT last_name, CONCAT('$ ',salary) AS basissalaris, CONCAT(IFNULL(commission_pct, 0), ' %') AS commissiepercentage, CONCAT('$ ', salary * IFNULL(commission_pct, 0)) AS commissie, CONCAT('$ ', ROUND(salary + salary * IFNULL(commission_pct, 0))) AS totaalsalaris

FROM employees;

 

clip0123

 

Om de query overzichtelijk te houden, wordt soms de volgende notatie gehanteerd:

 

SELECT        last_name

         , CONCAT('$ ',salary) AS basissalaris

         , CONCAT(IFNULL(commission_pct, 0), ' %') AS commissiepercentage

         , CONCAT('$ ', salary * IFNULL(commission_pct, 0)) AS commissie

         , CONCAT('$ ', ROUND(salary + salary * IFNULL(commission_pct, 0))) AS totaalsalaris

FROM employees;