@mefisto661

Как использовать переменную из GROUP BY во вложенном запросе?

Имеется следующая таблица -
CREATE TABLE help (user_id INT, source VARCHAR(10), watch INT, download INT);

С таким содержимым:
INSERT INTO help (user_id, source, watch, download) VALUES (1, 'netflix', 1, 0), (2, 'netflix', 1, 0), (3, 'amazon', 1, 1), (1, 'amazon', 1, 1), (2,'ivi', 1, 0), (1, 'netflix', 1,1);

В таблице содержатся данные какой "канал" смотрели пользователи (бинарный флаг watch) и скачивали (download).
Необходимо для каждого канала вывести количество уникальных пользователей, которые его посмотрели, и кол-во уникальных пользователей, которые что-то скачали. Оформить нужно одним запросом.

Можно написать так -
SELECT SUM(watch) as w, SUM(download) as d FROM help GROUP BY source;

Но тогда в результатах будут дубликаты. Хочу реализовать следующее:

SELECT (SELECT COUNT(DISTINCT(user_id) FROM help WHERE watch=1 and source=&&&) as w, (SELECT COUNT(DISTINCT(user_id) FROM help WHERE download=1 and source=&&&) as d FROM help GROUP BY source;


Вопрос в следующем - как мне во вложенных SELECT`ах искать записи только относящиеся к внешнему GROUP BY? Что надо поставить вместо &&&? Или возможно реализовать иначе, но одним запросом?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
select source, 
count( distinct user_id) filter(where watch > 0) as watch_cnt,
count( distinct user_id) filter(where download > 0) as download_cnt
from help group by source

?
Ответ написан
tsklab
@tsklab Куратор тега SQL
Здесь отвечаю на вопросы.
SELECT source, 
  COUNT ( DISTINCT CASE watch WHEN 1 THEN user_id ELSE NULL END ), 
  COUNT ( DISTINCT CASE download WHEN 1 THEN user_id ELSE NULL END )
FROM help
GROUP BY source
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы