【发布时间】:2023-03-24 19:45:01
【问题描述】:
我刚刚开始自学 SQL(我已经学习了一周,感觉到目前为止我做得很好)。
我有一个练习数据库,我只是在搞乱 - 有两个表(一个标题为“进度”,一个标题为“用户”)。
进展
此表包括来自“用户”的外键,用于标识注册 5 个不同编码课程(CPP、SQL、HTML、Javascript 和 Java)的学生,并指示学生是否已注册、已开始课程或已完成课程。
用户
此表包括用于识别学生的主键以及他们的人口统计信息(地址、大学的电子邮件域等...)。
我希望能够计算每所大学参加 5 门课程的学生人数。我已经能够一次为一所大学做到这一点,但我希望能够同时为所有 617 所不同的大学做到这一点。
WITH placeholder AS (
SELECT *
FROM users
JOIN progress
ON users.user_id = progress.user_id
GROUP BY email_domain
ORDER BY email_domain
)
select email_domain,
Sum(CASE WHEN learn_cpp = "completed" OR learn_cpp = "started" THEN 1 ELSE 0 END) AS 'CPP Enrollment',
Sum(CASE WHEN learn_sql = "completed" OR learn_SQL = "started" THEN 1 ELSE 0 END) AS 'SQL Enrollment',
Sum(CASE WHEN learn_html = "completed" OR learn_html = "started" THEN 1 ELSE 0 END) AS 'HTML Enrollment',
Sum(CASE WHEN learn_javascript = "completed" OR learn_javascript = "started" THEN 1 Else 0 END) AS 'Javascript Enrollment',
Sum(CASE WHEN learn_java = "completed" OR learn_java = "started" THEN 1 ELSE 0 END) AS 'Java Enrollment'
FROM placeholder;
这会返回所有大学的正确注册人数,但只有第一个大学电子邮件域(如下所示)。
aa.edu 238 317 183 306 119
我想要大学每门课程的入学人数(列中每门课程的入学人数应该有 167 行)。
【问题讨论】:
-
您是否尝试添加到 GROUP BY 大学和课程? (和排序依据)并在“从占位符”之后移动那些
-
唐巴勃罗是个天才