group_concat()聚合函数
使用sql45题的数据写2个查询语句:
select * from sc where sid = "01"; +------+------+-------+ | SId | CId | score | +------+------+-------+ | 01 | 01 | 80.0 | | 01 | 02 | 90.0 | | 01 | 03 | 99.0 | +------+------+-------+
mysql> select sid, group_concat(cid) from sc group by sid having sid = "01"; +------+-------------------------------+ | sid | group_concat(cid) +------+-------------------------------+ | 01 | 01,02,03 | +------+-------------------------------+
The MySQL GROUP_CONCAT()
function is an aggregate function that concatenates strings from a group into a single string with various options.
把一列数据聚合成一个单一的string。有几个参数:
GROUP_CONCAT( DISTINCT expression ORDER BY expression SEPARATOR sep );
sql45题中的第9题用到了group_concat()
-- 9.查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 -- 解题思路: -- 1.教程里面给了一篇文章谈到大数据下,尽量不要使用复杂的嵌套子查询。不利于运行效率。 -- 2.基于这个事实,我的代码分成2条查询语句 -- 3.第一条查询到'01'号同学学习的课程。这里有2个知识点: -- 其中一个是教程里面已经提到:group_concat。 -- 另一个是user-defined variable。所以可以使用@grou_c储存我们刚刚查询到的数据。 -- 4.第二条查询, -- 把Student左关联SC,然后剔除"01"号同学的记录。 -- 然后分组,使用having条件语句,筛选出和"01"号同学的课程完全一样的学生。 select sid, @group_c := group_concat(cid) from sc group by sid having sid = "01"; select Student.Sname from student left join SC on SC.sid = Student.sid and SC.sid <> "01" group by Student.Sname having group_concat(sc.cid) = @group_c; -- +--------+ -- | Sname | -- +--------+ -- | 孙风 | -- | 李云 | -- | 钱电 | -- +--------+