Сумма SQL на основе двух групп по - PullRequest
0 голосов
/ 25 октября 2018

У меня была одна таблица

ID   | khk | ts
11AH | 10   | 2
11AH | 10   | 2
11AH | 9    | 1
22AH | 5    | 2
22AH | 5    | 3

, и мне нужна сумма (ts) для сгруппированного идентификатора (но только если число идентификаторов больше 2) и из этого, только если количество сгруппированных кхх больше 1)

Так что для id 11AH это сумма (ts) = 4 (не 5) и для 22AH ничего, потому что их всего два.

Я пытаюсь что-то вроде этого, но это не правильно

select sum(ts),id from table group by id,khk having count(id)>2 and count(khk)>1;

Ответы [ 3 ]

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

вы можете попробовать с помощью оконной функции

with cte
(
select id,khk,ts, count(*) over(partition by id order by id) as id_cnt,
count(*) over(partition by khk order by khk) as khk_cnt
) select id,khk,sum(ts)
 where id_cnt>2 and khk_cnt>1
 group by id,khk
0 голосов
/ 25 октября 2018

Я рекомендую использовать аналитические функции, а не подзапросы:

select id, khk, sum_ts
from (select t.id, t.khk, sum(ts) as sum_ts,
             count(*) as cnt_id_khk, 
             count(*) over (partition by t.id) as cnt_id
      from t
      group by id, khk 
     ) t
where cnt_id_khk > 1 and cnt_id > 1
0 голосов
/ 25 октября 2018

Попробуйте ниже

ДЕМО

select * from
(select id,khk, sum(ts) as ts,(select count(id) from cte1 b where a.id=b.id) as cnt
from cte1 a 
group by id,khk 
having count(*)>1)X where cnt>2

ВЫХОД:

id      khk  ts  cnt
11AH    10   4   3
...