2016-10-07 5 views
0

Я создаю средство для рассылки новостей с таблицей, в которой хранятся идентификатор пользователя и адрес электронной почты электронной почты, для вычисления общего количества и уникальности для каждого отправленного сообщения электронной почты.SQL выбирает и подсчитывает ту же таблицу

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

Пример таблицы БД:

email_id | user_id | user 
---------------------------- 
1 | 1 | [email protected] 
1 | 1 | [email protected] 
1 | 1 | [email protected] 
1 | 2 | [email protected] 
1 | 3 | [email protected] 
1 | 4 | [email protected] 
1 | 4 | [email protected] 

Веб результат:

Я попробовал следующий запрос, но он работает только для первой строки, то он обрезает остальное:

SELECT DISTINCT user, count(DISTINCT user) as counttotal 
FROM newsletter_log 
where email_id = 1 
+0

Как насчет 'SELECT, пользователь, COUNT (*) AS counttotal FROM newsletter_log WHERE email_id = 1 GROUP BY user'? –

+0

Какая СУБД вы используете? –

+0

Это работает! Спасибо :) @FelixPamittan – Otto

ответ

3

Просто сделайте GROUP BY. Используйте COUNT(*) для подсчета.

select user, count(*) as counttotal 
FROM newsletter_log 
where email_id = 1 
group by user 
+0

он работает !!! Спасибо! Было так просто ... :( – Otto

1

попробуйте это.

select user,count(user) as times from newsletter_log where email_id = 1 group by user 

вам не нужно использовать отличный. просто используйте группу.

+0

он работает !!! Спасибо! :) – Otto

1

Концепция подобна, вы хотите получить счет на основе группы пользователей. Поэтому рассмотрите пользователя как группу и сделайте подсчет для каждой группы.

select user, count(1) as cnt 
FROM newsletter_log 
where email_id = 1 
group by user 

знаний, вы можете изучить различные модели подсчета, как COUNT (*), граф (1) и т.д.

1

Включать всего:

SELECT email, IsNull(User, 'Total'), COUNT(User) [Count] 
FROM newsletter_log 
WHERE email = 1 
GROUP BY email, User 
    WITH (ROLLUP) 
ORDER BY COUNT(User) DESC