创建表hero_skill
CREATE TABLE `hero_skill` (
`NAME` varchar(25) NOT NULL ,
`SKILL` varchar(255) NOT NULL
)
;
查询语句:
SELECT NAME,SKILL FROM hero_skill
结果
NAME | SKILL |
---|---|
鲁班 | 火力压制 |
鲁班 | 河豚手雷 |
鲁班 | 无敌嘴炮 |
后羿 | 分裂箭 |
后羿 | 分箭 |
- 使用MySQL用户变量,将以上结果合并输出。查询语句:
-- MySQL将同一条件下的多条记录合并为一条
SELECT
NAME,
max(CASE WHEN t = 1 THEN SKILL END) SKILL1,
max(CASE WHEN t = 2 THEN SKILL END) SKILL2,
max(CASE WHEN t = 3 THEN SKILL END) SKILL3
FROM(
SELECT
NAME,SKILL,IF ( @last_name = NAME, @t := @t + 1, @t := 1 ) AS t,@last_name := NAME AS last_name
FROM
(
SELECT NAME,SKILL FROM hero_skill
)a,
(SELECT (@t := 0),(@last_name :=0) ) b
)dd GROUP BY NAME
结果
NAME | SKILL1 | SKILL2 | SKILL3 |
---|---|---|---|
后羿 | 分裂箭 | 分箭 | (NULL) |
鲁班 | 火力压制 | 河豚手雷 | 无敌嘴炮 |
-
使用GROUP_CONCAT()
SELECT NAME,GROUP_CONCAT(SKILL)SKILL FROM hero_skill GROUP BY NAME
结果
NAME SKILL 后裔 分裂箭,分箭 鲁班 火力压制,河豚手雷,无敌嘴炮 默认逗号分隔,使用SEPARATOR 更改默认分隔符
SELECT NAME,GROUP_CONCAT(SKILL SEPARATOR '#')SKILL FROM hero_skill GROUP BY NAME
效果
NAME SKILL 后裔 分裂箭#分箭 鲁班 火力压制#河豚手雷#无敌嘴炮