Как заменить сумму (count () over (разбиение на x)) - PullRequest
0 голосов
/ 22 октября 2018

Попытка выяснить, как сделать следующее: sum(case when count(goal_id) over (partition by user_id) > 1 then 1 else 0 end) as user_with_multiple_goals.Это, очевидно, не поддерживается, но я бы предпочел не добавлять больше подзапросов, если это возможно каким-либо образом.

Есть предложения?

Таблица:

user_id goal_id
A       A
A       B
A       C
B       D
C       E
C       F

Вывод:2

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я думаю:

select count(*)
from (select user_id, count(*) as num_goals
      from t
      group by user_id
     ) u
where num_goals > 1;

Или:

select count(distinct user_id)
from t
where exists (select 1 from t t2 where t2.user_id = t.user_id and t2.goal_id <> t.goal_id);
0 голосов
/ 22 октября 2018

Исходя из ваших данных выборки, это можно упростить до обычного случая / количества:

SELECT user_id, 
       CASE WHEN COUNT(*) > 1 
            THEN 1 
            ELSE 0 
       END as user_with_multiple_goals
FROM yourTable
GROUP BY user_id

Редактирование сообщения:

SELECT DISTINCT COUNT(*)
FROM yourTable
GROUP BY user_id
HAVING COUNT(*) > 1
...