2013-03-29 2 views
19
+----------+----------+ 
| user_id | video_id | 
+----------+----------+ 
|  1 | 1  | 
|  1 | 1  | 
|  1 | 2  | 
|  2 | 1  | 
|  2 | 2  | 
+----------+----------+ 

У меня есть таблица, аналогичная той, что указана выше. Я хотел бы вернуть общее количество из моего запроса.MySQL Select Distinct Count

Для каждого user_id им необходимо иметь DISTINCT video_id. Таким образом, у user_id = 1 было бы 2 уникальных видеоида, а у user_id = 2 было бы 2 уникальных видеоида. Это сделает общее число 4. Я не уверен, что лучший способ организовать мой запрос для достижения желаемого результата.

В принципе для каждого user_id, мне нужно что-то вроде, COUNT(DISTINCT video_id)

Я хотел бы конечный результат просто возвращать общее количество всего.

ответ

47

Если вы хотите, чтобы получить общее количество для каждого пользователя, то вы будете использовать:

select user_id, count(distinct video_id) 
from data 
group by user_id; 

Тогда, если вы хотите, чтобы получить общее количество video_ids тогда вы будете обернуть это внутри подзапроса:

select sum(cnt) TotalVideos 
from 
(
    select user_id, count(distinct video_id) cnt 
    from data 
    group by user_id 
) d 

См. SQL Fiddle with Demo и того и другого.

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

+0

Спасибо, отлично поработал – Jako

+0

@bluefeet На стороне примечания, что, если у нас есть еще один столбец, скажем audio_id, и мы хотим получить его количество в том же запросе? –

+0

Относительно вашего ответа https://stackoverflow.com/questions/12789396/how-to-get-multiple-counts-with-one-sql-query/12789493#12789493, но мне нужно выбрать его как отличный, как указано выше , –

2
select user_id, count(distinct video_id) from TABLE group by user_id; 
+0

Есть ли способ, чтобы вернуть только общее количество, а не рассчитывать каждые пользователь? – Jako

+0

Да, и я верю, что синеватый ответил на это очень хорошо для вас. –

1

Для общего количества ...

select distinct count(video_id) from Table 
where... 
group...