MySQL Select Distinct Count
+----------+----------+
| user_id | video_id |
+----------+----------+
| 1 | 1 |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 2 |
+----------+----------+
У меня есть таблица, аналогичная той, которая приведена выше. Я хотел бы вернуть общее количество из моего запроса.
Для каждого user_id
они должны иметь a DISTINCT video_id
. Итак, выше, user_id = 1
будет иметь 2 уникальных видео_ида, а user_id = 2
будет иметь 2 уникальных видеоида. Это сделало бы общее 4. Я не уверен, что лучший способ организовать мой запрос для достижения желаемого результата.
В принципе для каждого user_id мне нужно что-то вроде COUNT(DISTINCT video_id)
Я хотел бы, чтобы в конечном результате просто возвращалось общее количество всего.
Ответы
Ответ 1
Если вы хотите получить общее количество для каждого пользователя, вы будете использовать:
select user_id, count(distinct video_id)
from data
group by user_id;
Затем, если вы хотите получить общее видео_ид, вы обернете это внутри подзапроса:
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
, а затем, чтобы получить общее количество всех отдельных видеоданных, вы суммируете счет.
Ответ 2
select user_id, count(distinct video_id) from TABLE group by user_id;
Ответ 3
Для общего количества...
select distinct count(video_id) from Table
where...
group...
Ответ 4
На данный момент общее количество уникальных пар user_id, video_id может быть рассчитано с помощью следующего запроса
select count(distinct user_id, video_id) from table;