Ghinion (pentru unii :P), post-ul acesta este strict de tehnologie. Mai exact SQL Server (Microsoft).
Am descoperit o chestie interesanta (100% scrie in documentatie dar eu nu o citisem) :
(Exemplu simplificat puternic) Sa zicem ca ai o tabela T cu o coloana A de tip INT si datele tabelei sunt :
A
_________
0
1
2
NULL
Ei bine atunci SELECT DISTINCT A FROM T va returna
0
1
2
NULL
Dar! SELECT COUNT(DISTINCT A) FROM T va returna 3 (nu 4 cum s-ar astepta unii dintre noi).
Se pare ca e foarte privilegiata aceasta valoare numita NULL. O sa verific probabil maine la serviciu cum merg lucrurile in PL/SQL (Oracle) insa tare cred ca e la fel.
Luni, 18-februarie-2008 la 12:08 pm
Nu trebuie sa te mire experimentul de mai sus deoarece valorile de tip NULL nu se pot agrega (COUNT, SUM, AVG etc) – este standard ANSI SQL.
PS: Este valabil si pt SELECT COUNT(A) FROM T, dar nu si pt SELECT COUNT(*) FROM T deoarece comanda din urma numara randuri, nu numarul de valori ale unei coloane.
Miercuri, 12-martie-2008 la 11:12 pm
COUNT intotdeauna numara valorile nenule, cam ca toate operatiunile de agregare. De aia cind faci o numarare a elementelor a care au corespondenta in b faci select count(b.id) from a left outer join b on a.id=b.id (ma rog, asta e un exemplu timpit, ca ar merge cu inner join, dar poate veri si suma tuturor elementelor din a in acelasi query).
Intotdeauna am asociat COUNT cu SUM(CASE WHEN x IS NOT NULL THEN 1 END).