2013-05-22 5 views
42

Если у меня есть три колонки:MySQL - Count Число уникальных значений

orderNumber, name, email 

, и я хотел бы, чтобы подсчитать, сколько уникальных сообщений электронной почты в таблице как бы я идти об этом?

заявление как:

SELECT count(email) FROM orders 

дает мне общее количество.

Я попытался SELECT DISTINCT count(email) FROM orders

но не кажется, что будет давать мне номер я ожидал.

+0

Это очень похоже на http://stackoverflow.com/questions/8264658/select-count-for-each-distinct-row-mysql-and- php – Danexxtone

ответ

85

использование

SELECT count(DISTINCT(email)) FROM orders 

Distinct обеспечивают уникальные идентификаторы электронной почты, а затем просто их сосчитать.

+1

Насколько я ценю ответ, не могли бы вы объяснить, почему это отличается от того, что я делал для собственного назидания? – thatidiotguy

+1

таким образом вы считаете разные электронные письма, а не отличаетесь количеством сообщений электронной почты –

+3

@thatidiotguy, делая «ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ счет (email) FROM orders». Вы сначала подсчитываете все письма (включая дубликаты), а затем фильтруете с использованием отдельных. поэтому вы получите общее количество сообщений электронной почты, а не общее количество отдельных писем. –

7
SELECT count(DISTINCT(email)) FROM orders 

его отличается от вашей проводки, так как его отфильтровывает дубликаты перед подсчетом его

0

Для лучшей производительности следует использовать:

SELECT 
sub.email, 
count(1) as 'count_unique' 
FROM 
(SELECT email FROM orders GROUP by email) sub 
Смежные вопросы