zoukankan      html  css  js  c++  java
  • Mysql group_concat()

    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  |
    -- +--------+
    -- | 孙风   |
    -- | 李云   |
    -- | 钱电   |
    -- +--------+

    我的sql45题的部分答案:https://github.com/chentianwei411/sql-45-

  • 相关阅读:
    python
    HTTP和HTTPS协议,详解
    常用加密算法之非对称加密算法
    Docker容器数据卷-Volume详解
    使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory
    Docker 查看容器 IP 地址
    Docker容器数据卷volumes-from
    Docker 进入容器的4种方法
    Jmeter之Bean shell使用(二)
    Jmeter之Bean shell使用(一)
  • 原文地址:https://www.cnblogs.com/chentianwei/p/12134040.html
Copyright © 2011-2022 走看看