2017-11-27 2 views
0

Ich bin ziemlich neu in MySQL und würde ein wenig Hilfe in der Group_Concat-Anweisung benötigen. Ich habe die untenstehende TabelleMYSQl - Anzahl der Elemente in 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 

Für die Kombination von gleichen Verkäufer und Händler, dass alle Einzelteile, die unterschiedliche CustomerIDs zusammen mit dem zu zählen, wie oft hat es wiederholt.

Ich bin in der Lage, die Anzahl der eindeutigen Kunden-IDS mit group_concat abzuleiten, aber nicht in der Lage, die Anzahl zu erhalten.

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 
) 

, die mir das unten stehende Ergebnis

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

während ich die folgenden

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

Antwort

3

Sie müssen zuerst Aggregat an der seller/merchant/customerid Ebene möchte den Zählwert zu erhalten . Dann können Sie mit Ihrer Aggregation fortfahren:

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