MySQL 有条件的 Group_Concat

MySQL Conditional Group_Concat

我需要有条件的帮助 group_concat。

我有一个 table,表 1,有四列 (id,day,class,results)。我想按 id 和日期连接结果列,并按 class 将连接分成列,因此预期结果如下所示:

id | day | class1 | class2 | class3 | class4 | class5 | class6

1 | Monday | APPL<br>TSLA<br>BRK | NKE<br>GOOG<br>ARKK | etc etc
1 | Tuesday | AGEN<br>MSFT<br>SBUX | BCE<br>S&P<br>FB | etc etc

我正在努力解决如何实施 WHERE 子句的问题,因此我的结果目前忽略了 class(请参阅 fiddle)。我已经尝试了多个 WHERE 子句和 GROUP By 的不同组合,但无法弄清楚。

为了简单起见,这是我当前的代码,只有两个 class 列:

SELECT id,day, (select (concat_ws('<br>',group_concat(results SEPARATOR '<br>')))
group by id,day) as class1,
(select (concat_ws('<br>',group_concat(results SEPARATOR '<br>')))
group by id,day) as class2
from Table1
group by id,day
order by field(day,'monday','tuesday','wednesday','thursday','friday','saturday','sunday')

表 1 示例:

| id  | day     | class | results |
| --- | ------- | ----- | ------- |
| 1   | Monday  | 1     | APPL    |
| 1   | Monday  | 1     | TSLA    |
| 1   | Monday  | 1     | BRK     |
| 1   | Monday  | 2     | NKE     |
| 1   | Monday  | 2     | GOOG    |
| 1   | Monday  | 2     | ARKK    |
| 1   | Monday  | 3     | AGEN    |
| 1   | Monday  | 3     | MSFT    |
| 1   | Monday  | 3     | SBUX    |
| 1   | Monday  | 3     | BCE     |
| 1   | Tuesday | 1     | AGEN    |
| 1   | Tuesday | 1     | MSFT    |
| 1   | Tuesday | 1     | SBUX    |
| 1   | Tuesday | 2     | BCE     |
| 1   | Tuesday | 2     | S&P     |
| 1   | Tuesday | 2     | FB      |

Fiddle: https://www.db-fiddle.com/f/m1drVtHD1wzsrLHFLJ2Lu1/5

您需要条件聚合:

SELECT id, day,
       GROUP_CONCAT(CASE WHEN class = 1 THEN results END SEPARATOR '<br>') class1,
       GROUP_CONCAT(CASE WHEN class = 2 THEN results END SEPARATOR '<br>') class2,
       GROUP_CONCAT(CASE WHEN class = 3 THEN results END SEPARATOR '<br>') class3,
       GROUP_CONCAT(CASE WHEN class = 4 THEN results END SEPARATOR '<br>') class4,
       GROUP_CONCAT(CASE WHEN class = 5 THEN results END SEPARATOR '<br>') class5,
       GROUP_CONCAT(CASE WHEN class = 6 THEN results END SEPARATOR '<br>') class6
FROM Table1
GROUP BY id, day
ORDER BY FIELD(day,'monday','tuesday','wednesday','thursday','friday','saturday','sunday')

参见demo