You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助将3条SQL查询语句合并为单条查询语句

合并SQL查询获取课程多维度统计数据

可以通过子查询+关联的方式把三个统计合并成一条语句,同时要注意避免关联时的重复计数问题,比如学生数统计需要用COUNT(DISTINCT)来防止因关联其他表导致的重复统计。以下是最终的合并查询:

SELECT 
    c.cname,
    COALESCE(a.numberOfActivites, 0) AS numberOfActivites,
    COALESCE(s.numberOfStud, 0) AS numberOfStud,
    COALESCE(sc.averageScore, 0) AS averageScore
FROM course c
LEFT JOIN (
    SELECT course.cid, course.cname, COUNT(*) AS numberOfActivites
    FROM activity
    JOIN course ON course.cid = activity.cid
    GROUP BY course.cid, course.cname
) a ON c.cid = a.cid
LEFT JOIN (
    SELECT course.cid, course.cname, COUNT(DISTINCT student.studentid) AS numberOfStud
    FROM course
    JOIN enrolledstd ON course.cid = enrolledstd.cid
    JOIN student ON student.studentid = enrolledstd.studentid
    GROUP BY course.cid, course.cname
) s ON c.cid = s.cid
LEFT JOIN (
    SELECT course.cid, course.cname, AVG(score.score) AS averageScore
    FROM course
    JOIN activity ON activity.cid = course.cid
    JOIN score ON score.acid = activity.acid
    GROUP BY course.cid, course.cname
) sc ON c.cid = sc.cid
ORDER BY c.cname;

关键说明:

  1. 用LEFT JOIN替代内连接:确保即使某个课程没有活动、没有学生或者没有分数记录,依然能在结果中显示该课程,避免数据丢失。
  2. COUNT(DISTINCT)统计学生数:如果直接关联所有表统计,会因为课程下的活动数导致学生记录被重复计算,用DISTINCT保证每个学生只被计数一次。
  3. COALESCE处理空值:如果某课程没有对应统计数据(比如无活动),用COALESCE把NULL替换为0,符合常规统计展示逻辑。
  4. 按课程ID分组关联:相比仅用课程名关联,用cid(课程ID)更准确,避免不同课程重名导致的关联错误。

内容的提问来源于stack exchange,提问作者kaiox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:55:06