MySQL - 选择。在行中多次追加字段

时间:2014-09-11 21:46:44

标签: mysql

假设我有这张表:

+-----------+-------+
| name      | seat  |
+-----------+-------+
| Andrew    | 1     |
| Andrew    | 5     |
| Andrew    | 15    |
| Billy     | 2     |
| Billy     | 5     |
+-----------+-------+

对于每个nameSELECT是否有任何相应的seat出现方式,并将它们添加到一行中?

期望的输出:

+-----------+-------+-------+-------+
| name      | seat1 | seat2 | seat3 |
+-----------+-------+-------+-------+
| Andrew    | 1     | 5     | 15    |
| Billy     | 2     | 5     | NULL  |
+-----------+-------+-------+-------+




我尝试了一个简单的SELECTGROUP

SELECT `name`, seat
FROM users
GROUP BY `name`
ORDER BY `name`;


但它当然会为每个名称输出1列seat

+-----------+-------+
| name      | seat  |
+-----------+-------+
| Andrew    | 1     |
| Billy     | 2     |
+-----------+-------+



这甚至可能吗?

1 个答案:

答案 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

希望这会有所帮助