【问题标题】:How to run case counts by group?如何按组运行案例计数?
【发布时间】: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 大学和课程? (和排序依据)并在“从占位符”之后移动那些
  • 唐巴勃罗是个天才

标签: sql count sum case


【解决方案1】:

donPablo 在 cmets 中很快发现了这一点。

我将我的 GROUP BY 和 ORDER BY 命令从连接表命令中移到了我的代码末尾,以便在计算注册计数后运行它。

这产生了我想要的结果。

感谢您的快速回复!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多