假设我有这张表:
+-----------+-------+
| name | seat |
+-----------+-------+
| Andrew | 1 |
| Andrew | 5 |
| Andrew | 15 |
| Billy | 2 |
| Billy | 5 |
+-----------+-------+
对于每个name
,SELECT
是否有任何相应的seat
出现方式,并将它们添加到一行中?
期望的输出:
+-----------+-------+-------+-------+
| name | seat1 | seat2 | seat3 |
+-----------+-------+-------+-------+
| Andrew | 1 | 5 | 15 |
| Billy | 2 | 5 | NULL |
+-----------+-------+-------+-------+
我尝试了一个简单的SELECT
与GROUP
:
SELECT `name`, seat
FROM users
GROUP BY `name`
ORDER BY `name`;
但它当然会为每个名称输出1列seat
。
+-----------+-------+
| name | seat |
+-----------+-------+
| Andrew | 1 |
| Billy | 2 |
+-----------+-------+
这甚至可能吗?
答案 0 :(得分:1)
因为您正在使用 group by
您需要聚合功能
group_concat是您可能必须使用的那个,
select name, group_concat(seat, SEPARATOR ",") from ...
它应该产生类似
的东西 +-----------+-------+
| name | seats |
+-----------+-------+
| Andrew | 1,5,15|
| Billy | 2,5 |
+-----------+-------+
确定它是一个单独的列,其中的所有字符串由SEPARATOR字符串而不是多列分隔,但希望这将是有用/可用的
否则你可能需要多次使用包含group_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 ....
当然这也不是你想要得到的 - 我看不出所选列数如何变得动态
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
希望这会有所帮助