SQL och COALESCE för NULL och icke NULL-värden

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

SQL och COALESCE för NULL och icke NULL-värden

Inlägg12 mar 2019, 15:55

I boken står det att en coalesce kan ersätta null värden från ett resultat. Kan man ersätta med annat än bara siffror?


Funktionen COALESCE tar en lista av argument och returnerar det första värdet som inte är NULL.
Kod: Markera allt
mysql> SELECT COALESCE(NULL, NULL, 'moped', 42);
+-----------------------------------+
| COALESCE(NULL, NULL, 'moped', 42) |
+-----------------------------------+
| moped                             |
+-----------------------------------+
1 row in set (0.00 sec)


Okej, så om ett av null värden skulle istället vara en aggregatfunktion, typ sum(x), så hade för varje X som varit null i resultatet blivit 'moped'?


En aggregatfunktion likt SUM kan inte bli NULL, den kan bli 0.
Fel av mig, den kunde visst bli NULL.
Magiskt med små testprogram, även i databasvärlden.
Kod: Markera allt
mysql> SELECT * FROM a;
+----+------+
| id | b    |
+----+------+
|  1 | NULL |
|  2 | B    |
|  3 | NULL |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT SUM(id), SUM(b) FROM a where id != 2;
+---------+--------+
| SUM(id) | SUM(b) |
+---------+--------+
|       4 |   NULL |
+---------+--------+
1 row in set (0.00 sec)

mysql> SELECT SUM(id), COALESCE(SUM(b), "MOPED") FROM a where id != 2;
+---------+---------------------------+
| SUM(id) | COALESCE(SUM(b), "MOPED") |
+---------+---------------------------+
|       4 | MOPED                     |
+---------+---------------------------+
1 row in set (0.00 sec)


Häftigt! Det verkar ju som en COALESCE hade sparat massa tid, istället för att t.ex hantera ett null värde i en javascript function för att konvertera om till en string på applications sidan av ett system


Jao, man skall alltid bli misstänksam när man gör postprocessing i klientkod (typ js), ofta går det att fixa till sakerna redan i SQL-satsen.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 10 gäster