GROUP_CONCAT 有两个字段

Bod*_*odi 1 mysql

我的表有两个字段(ID 和 Status)

我想获取group_concat每个 ID 的每个状态的计数。

ID  Status
1   True
1   True
1   False
2   True
2   False
2   False
Run Code Online (Sandbox Code Playgroud)

我希望我的结果是

ID Group_Concat
1  (True-2, False-1)
2  (True-1, False-2)
Run Code Online (Sandbox Code Playgroud)

我可以在 PHP 中解析 True-# / False-#...除非有办法使其成为 group_concat 中的单独字段?

我已经玩过以下内容,但无济于事......它不断为每个 ID 和状态创建单独的行。这将是一个更大的 SELECT 的一部分,但我认为这与用该 SQL 混淆这个问题无关。

SELECT ID,Status, GROUP_CONCAT(c) 
FROM (
  SELECT ID, Status,COUNT(Status) c 
  FROM buyer_advert GROUP BY ID,Status
) a GROUP BY ID, Status
Run Code Online (Sandbox Code Playgroud)

jpw*_*jpw 5

您可以通过添加一个concat内部来做到这一点group_concat,如下所示:

SELECT 
  ID,
  GROUP_CONCAT(CONCAT(Status,'-',c),' ' ORDER BY Status DESC) 
FROM (SELECT ID, status, COUNT(Status) c
      FROM buyer_advert 
      GROUP BY ID, status
     ) a 
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)

示例 SQL 小提琴