MySQL-SELECT。在行中多次追加字段
假设我有一张桌子:MySQL-SELECT。在行中多次追加字段,mysql,Mysql,假设我有一张桌子: +-----------+-------+ | name | seat | +-----------+-------+ | Andrew | 1 | | Andrew | 5 | | Andrew | 15 | | Billy | 2 | | Billy | 5 | +-----------+-------+ 每个名称是否有办法选择座椅的相应匹配项,并将它们附加到一行中 期望输出: +---
+-----------+-------+
| name | seat |
+-----------+-------+
| Andrew | 1 |
| Andrew | 5 |
| Andrew | 15 |
| Billy | 2 |
| Billy | 5 |
+-----------+-------+
每个名称
是否有办法选择座椅
的相应匹配项,并将它们附加到一行中
期望输出:
+-----------+-------+-------+-------+
| name | seat1 | seat2 | seat3 |
+-----------+-------+-------+-------+
| Andrew | 1 | 5 | 15 |
| Billy | 2 | 5 | NULL |
+-----------+-------+-------+-------+
我用
组尝试了一个简单的选择:
SELECT `name`, seat
FROM users
GROUP BY `name`
ORDER BY `name`;
但它当然会为每个名字输出一列seat
+-----------+-------+
| name | seat |
+-----------+-------+
| Andrew | 1 |
| Billy | 2 |
+-----------+-------+
这可能吗?怎么可能?
因为您使用的是分组方式
你需要聚合函数
组_concat是您可能必须使用的组
select name, group_concat(seat, SEPARATOR ",") from ...
它应该产生类似于
+-----------+-------+
| name | seats |
+-----------+-------+
| Andrew | 1,5,15|
| Billy | 2,5 |
+-----------+-------+
当然,它是一个单列,其中的所有字符串由分隔符字符串分隔,而不是多个列,但希望这将是有用的/可用的
否则,您可能需要执行更多的字符串操作来多次使用include组_concat(seat,SEPARATOR“,”),并以某种方式解析其中的位置,例如
select SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",1), SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",2), SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",3) from ....
当然,这也不完全是你想要得到的——我不知道如何使所选列的数量成为动态的
希望这能有所帮助是的,这是可能的,它被称为旋转结果。MySql不支持pivot语句,因此需要使用一个准备好的语句。这里有一个例子:一般来说,最好在表示层中处理显示逻辑——假设您有that@sgeddes谢谢你提供的信息,我不知道它是那样叫的。我总是说,使用正确的关键字可以得到正确的信息。问题在于知道它们是什么:DIt可以动态化。其他地方也有介绍,但有点乏味。是的,这很有帮助。我甚至不认为这些字段可以连在一起。受你的启发,我尝试了一些更复杂的东西,比如GROUP_CONCAT(CONCAT(column1,'some string',column2)分隔符“
”)
,它非常适合我。