Mysql 使用逗号内的单个值连接字符串
我有一个名为toy table的表,它显示了处理的每种玩具类型的销售ID,不同的销售ID之间有逗号。请注意,我的数据模式不是这样的。但我在玩具层面上汇总数据,生成报告Mysql 使用逗号内的单个值连接字符串,mysql,Mysql,我有一个名为toy table的表,它显示了处理的每种玩具类型的销售ID,不同的销售ID之间有逗号。请注意,我的数据模式不是这样的。但我在玩具层面上汇总数据,生成报告 |------------------------|------------------------| | Toy | IDs | |------------------------|------------------------| | Bu
|------------------------|------------------------|
| Toy | IDs |
|------------------------|------------------------|
| Buzz Lightyear | 22,33,44 |
| Woody | 24,41 |
|------------------------|------------------------|
我有另一个名为status table的表,它具有每个订单ID的状态
|------------------------|------------------------|
| ID | Status |
|------------------------|------------------------|
| 22 | running |
| 33 | paused |
| 44 | running |
| 24 | cancelled |
| 41 | finished |
|------------------------|------------------------|
我想通过一个连接创建一个表,其中可以有一个状态列,以逗号分隔,按销售ID的正确顺序排列,还可以有一个仅用于运行ID的列。它看起来是这样的:
|------------------------|------------------------|------------------------|-----------------------|
| Toy | IDs | Status | Running IDs. |
|------------------------|------------------------|------------------------|-----------------------|
| Buzz Lightyear | 22,33,44 |running, paused, running| 22,44 |
| Woody | 24,41 | cancelled, finished | |
|------------------------|------------------------|------------------------|-----------------------|
SELECT t.Toy,
GROUP_CONCAT(o.ID ORDER BY o.ID) AS IDs,
GROUP_CONCAT(s.Status ORDER BY s.ID) AS Status,
GROUP_CONCAT(CASE WHEN s.Status = 'running' THEN s.ID END) AS `Running IDs`
FROM toys t
JOIN orders o ON o.Toy_ID = t.ID
JOIN status s ON s.ID = o.ID
GROUP BY t.Toy
我不知道如何加入。我已经试着通过find_in_set找到ID的位置,但是在那之后,我似乎无法继续前进。我必须报告玩具级别,以便在最终数据集中一行中不能有多个玩具 在进行聚合之前,需要进行连接。如果看不到表结构,很难100%确定,但是您想要的查询应该如下所示:
|------------------------|------------------------|------------------------|-----------------------|
| Toy | IDs | Status | Running IDs. |
|------------------------|------------------------|------------------------|-----------------------|
| Buzz Lightyear | 22,33,44 |running, paused, running| 22,44 |
| Woody | 24,41 | cancelled, finished | |
|------------------------|------------------------|------------------------|-----------------------|
SELECT t.Toy,
GROUP_CONCAT(o.ID ORDER BY o.ID) AS IDs,
GROUP_CONCAT(s.Status ORDER BY s.ID) AS Status,
GROUP_CONCAT(CASE WHEN s.Status = 'running' THEN s.ID END) AS `Running IDs`
FROM toys t
JOIN orders o ON o.Toy_ID = t.ID
JOIN status s ON s.ID = o.ID
GROUP BY t.Toy
读取并修复架构。我的数据库没有删除列表。但当我在玩具层面上进行聚合时,我就得到了这样的结果。我使用group by toy和group_concatdistinct ids将状态表加入到您的语句中,并在statuses.id=toys.status上,因此每行都有一个标签。然后在状态标签处分组