要求:用一条sql查出每个学生选了多少门课程,分别是什么

一、先建三张表:分别是学生表students、课程表classes、学生选课表stuclass
学生表课程表学生选课表
二、先分别查出每个学生选了多少门课程和每个学生分别选了哪些课程,sql语句

#每个学生选了多少门课程
SELECT
    s.id,
    s. NAME,
    count(*) count
FROM
    students AS s
LEFT JOIN stuclass AS sc ON s.id = sc.stu_id
GROUP BY
    s.id
# 每个学生选了哪些课程
SELECT
    stu_id,
    GROUP_CONCAT(c.classname) class
FROM
    stuclass AS sc
LEFT JOIN classes AS c ON c.id = sc.class_id
GROUP BY
    sc.stu_id

 

结果如下:(group_concat函数使用参考ysql将查询结果用逗号分隔开来
每个学生选了哪些课程

现在数据都查出来了,只要把两条sql合并成一条就可以了

SELECT
    *
FROM
    (
        SELECT
            s.id,
            s. NAME,
            count(*) count
        FROM
            students AS s
        LEFT JOIN stuclass AS sc ON s.id = sc.stu_id
        GROUP BY
            s.id
    ) a
LEFT JOIN (
    SELECT
        stu_id,
        GROUP_CONCAT(c.classname) class
    FROM
        stuclass AS sc
    LEFT JOIN classes AS c ON c.id = sc.class_id
    GROUP BY
        sc.stu_id
) b ON b.stu_id = a.id

 

查询结果如下:
最终结果