2013-05-22 19 views
42

Jeśli mam trzy kolumny:MySQL - Hrabia liczba unikalnych wartości

orderNumber, name, email 

i chciałbym policzyć ile unikalne e-maile są w tabeli, jak bym za to zabrać?

Oświadczenie jak:

SELECT count(email) FROM orders 

daje mi całkowitą liczbę.

Próbowałem SELECT DISTINCT count(email) FROM orders

ale które nie wydają się być dając mi numery spodziewam.

+0

ta jest bardzo podobna do http://stackoverflow.com/questions/8264658/select-count-for-each-distinct-row-mysql-and- php – Danexxtone

Odpowiedz

85

użycie

SELECT count(DISTINCT(email)) FROM orders 

Wyraźny zapewniają unikalne identyfikatory e-mail, a następnie po prostu je policzyć.

+1

Jak bardzo doceniam odpowiedź, czy mógłbyś wyjaśnić, dlaczego różni się to od tego, co robiłem dla własnego zbudowania? – thatidiotguy

+1

w ten sposób liczą się różne wiadomości e-mail, a nie odrębny numer e-mail –

+3

@atatidiotguy, wykonując "WYBIERZ LISTĘ DISTINCT (e-mail) OD zamówień" najpierw liczą się wszystkie wiadomości e-mail (w tym duplikaty), a następnie filtrowanie przy użyciu odrębnych. więc otrzymasz całkowitą liczbę e-maili, a nie całkowitą liczbę różnych e-maili. –

7
SELECT count(DISTINCT(email)) FROM orders 

jego różni się od delegowania, ponieważ jego odfiltrowuje duplikaty przed licząc to

0

Aby uzyskać najlepszą wydajność należy użyć:

SELECT 
sub.email, 
count(1) as 'count_unique' 
FROM 
(SELECT email FROM orders GROUP by email) sub 
Powiązane problemy