现有三个表:学生表(学生id,姓名)、课程表(课程id,课程名)、学生选课表(学生id,课程id),请问要列出所有学生的选课情况(每个学生选了多少门课,分别是什么),请写出SQL语句


要求:用一条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

 

查询结果如下:
最终结果


php 中修改内存限制的三种方法 及 获取当前使用内存、内存使用的最大峰值

PHP http请求超时问题解决方案

评 论
更换验证码