Una din tainele lui DISTINCT


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.

2 Răspunsuri to “Una din tainele lui DISTINCT”

  1. joule Says:

    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.

  2. Siderite Says:

    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).


Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: