Mysql的group_concat函数

-- 13、查询和"01"号的同学学习的课程完全相同的其他同学的信息
select distinct Student.* from Student 
left join Score on Student.s_id = Score.s_id
GROUP BY Student.s_id
having GROUP_CONCAT(Score.c_id) = (
select GROUP_CONCAT(Score.c_id) from Student 
left join Score on Student.s_id = Score.s_id
where  Student.s_id = '01'
)
前言:在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中。(有关group by的知识请戳:浅析SQL中Group By的使用)。

Mysql的group_concat函数

该例查询了name相同的的人中最小的id。如果我们要查询name相同的人的所有的id呢?

Mysql的group_concat函数

但是这样同一个名字出现多次,看上去非常不直观。有没有更直观的方法,既让每个名字都只出现一次,又能够显示所有的名字相同的人的id呢?——使用group_concat()

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

Mysql的group_concat函数

group_conact()连接的是查询字段和分组字段,所以条件语句要加在having后面,而不能加在where后面

Mysql的group_concat函数