2017-04-19 1 views
0
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 

J'ai créé une table en combinant plusieurs bases de données (un échantillon de la table créée est ci-dessus). Je veux le nombre de fois que chaque customer_id est arrivé chaque semaine (comme pour 2017-04 semaine customer_id 1 est venu en 3 fois, nous voulons considérer la ligne 2 & 3 comme identique (donc 1 compte pour cela) puis la ligne 1 et la rangée 4 fait . 3 foisFonction d'agrégation sur le groupe par sur plusieurs colonnes

Ainsi, la production devrait être:

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

J'essaie quelque chose dans les lignes suivantes:

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

Mais, je veux confirmer faire comme cela que ça compte Rangées 2 & 3 en un ou deux chefs d'accusation?

Répondre

2

Je pense que vous voulez count(distinct):

select week, customer_id, count(distinct cid) 
from table 
group by week, customer_id; 
+0

Je pense que le nombre (cid distinct) est ce que je veux, mais juste curieux de savoir si je fais groupe par semaine, customer_id, L1 au lieu de groupe par semaine, customer_id, cela fera-t-il une différence? – Arman

+0

@Arman. . . Selon vos données d'échantillon, cela ferait une différence. –

0
SELECT WEEK, 
     CUSTOMER_ID, 
     COUNT(DISTINCT CID) 
    FROM TABLE 
GROUP BY WEEK,CUSTOMER_ID;