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;