Агрегирующая функция для группы по нескольким столбцам

WEEK    | CID | CUSTOMER_ID | L1
2017-04 | 12  | 1           | ABC
2017-04 | 13  | 1           | ABC
2017-04 | 13  | 1           | ABC
2017-04 | 16  | 1           | DFG
2017-04 | 15  | 2           | DFG
2017-14 | 14  | 1           | DFG

Я создал таблицу, объединив множество баз данных (пример созданной таблицы выше). Я хочу, чтобы количество раз, когда каждый customer_id появлялся каждую неделю (например, для 2017-04 недели customer_id 1 появлялось 3 раза, мы хотим рассматривать строки 2 и 3 как одинаковые (поэтому 1 считается для этого), а затем строки 1 и строки 4 делают это 3 раза.

Итак, вывод должен быть:

WEEK    | CUSTOMER_ID | COUNT(CUSTOMER_ID)
2017-04 | 1           | 3
2017-04 | 2           | 1
2017-14 | 1           | 1

Я пытаюсь что-то сделать в следующих строках:

select
    week, customer_id, count(customer_id)
from
    table
group by 
    week, cid, customer_id, L1;

Но я хочу подтвердить, что при этом будут ли считаться строки 2 и 3 как один или два счета?


person Arman    schedule 19.04.2017    source источник


Ответы (1)


Я думаю, вы хотите count(distinct):

select week, customer_id, count(distinct cid)
from table
group by week, customer_id;
person Gordon Linoff    schedule 19.04.2017
comment
Я думаю, что count(distinct cid) — это то, что мне нужно, но просто любопытно, если я сделаю группировку по неделям, customer_id, L1 вместо группировки по неделям, customer_id, будет ли это иметь значение? - person Arman; 19.04.2017
comment
@Арман. . . Основываясь на ваших выборочных данных, это будет иметь значение. - person Gordon Linoff; 20.04.2017