2017-11-27 10 views
0

私はMYSQLにはかなり新しく、group_concatステートメントで少し助けが必要です。私は同じ売り手と商人の組み合わせ、それが繰り返される回数のカウントと一緒に異なるのCustomerIDsを持っているすべての項目について、以下の表MYSQl - Group_Concat内の要素の数

Seller Merchant CustomerID 
S1  M1  C1 
S1  M1  C1 
S1  M1  C2 
S1  M1  C3 
S1  M1  C4 
S2  M2  C5 
S2  M2  C6 
S3  M3  C6 

を持っています。

group_concatを使用して一意の顧客IDをカウントできますが、カウントを取得できません。私は以下の結果

Seller Merchant CustomerID COUNT_OF_CUSTIDS 
S1  M1  C1,C2,C3,C4 4 
S2  M2  C5,C6   2 

を与える

SELECT * , LENGTH(CUSTIDS) - LENGTH(REPLACE(CUSTIDS,',',''))+1 AS COUNT_OF_CUSTIDS 
FROM (SELECT SELLER, MERCHANT, GROUP_CONCAT(CUSTOMERID SEPARATOR '|') AS CUSTIDS 
FROM TABLE 
GROUP BY SELLER, MERCHANT 
HAVING COUNT(DISTINCT CUSTOMERID) >1 
) 

私が望むのに対し、あなたはカウントを取得するためにseller/merchant/customeridレベルで最初の集計に必要

Seller Merchant CustomerID     COUNT_OF_CUSTIDS 
S1  M1  C1(2),C2(1),C3(1),C4(1) 4 
S2  M2  C5(1),C6(1)    2 

答えて

3

以下。その後、集計を続けることができます:

SELECT SELLER, MERCHANT, 
     COUNT(*) as COUNT_OF_CUSTIDS, 
     GROUP_CONCAT(CUSTOMERID, ' (', cnt, ')' SEPARATOR '|') AS CUSTIDS 
    FROM (SELECT SELLER, MERCHANT, COUNT(*) as cnt 
     FROM TABLE 
     GROUP BY SELLER, MERCHANT, CUSTOMERID 
     ) t 
    GROUP BY SELLER, MERCHANT 
    HAVING COUNT(*) > 1