MYSQl - Group_Concat 内的元素数
MYSQl - Count of elements inside Group_Concat
我是 MYSQL 的新手,在 group_concat 语句中需要一些帮助。我有以下 table
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
对于同一卖家和商家的组合,所有具有不同customerID的商品及其重复次数。
我可以使用 group_concat 推导出唯一客户 IDS 的数量,但无法获得该数量。
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 COUNT_OF_CUSTIDS
S1 M1 C1,C2,C3,C4 4
S2 M2 C5,C6 2
而我想要下面的
Seller Merchant CustomerID COUNT_OF_CUSTIDS
S1 M1 C1(2),C2(1),C3(1),C4(1) 4
S2 M2 C5(1),C6(1) 2
您需要先在 seller
/merchant
/customerid
级别进行聚合以获得计数。然后你可以继续你的聚合:
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
我是 MYSQL 的新手,在 group_concat 语句中需要一些帮助。我有以下 table
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
对于同一卖家和商家的组合,所有具有不同customerID的商品及其重复次数。
我可以使用 group_concat 推导出唯一客户 IDS 的数量,但无法获得该数量。
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 COUNT_OF_CUSTIDS
S1 M1 C1,C2,C3,C4 4
S2 M2 C5,C6 2
而我想要下面的
Seller Merchant CustomerID COUNT_OF_CUSTIDS
S1 M1 C1(2),C2(1),C3(1),C4(1) 4
S2 M2 C5(1),C6(1) 2
您需要先在 seller
/merchant
/customerid
级别进行聚合以获得计数。然后你可以继续你的聚合:
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