0

我有一个包含两列的表,即teacheridsub_group。现在, sub_group 的值可以在 0-100 之间,其中 0 表示教师讲座,大于 0 表示教程。我希望能够计算教师分组的讲座和教程的数量。

到目前为止,我有两个查询,例如

SELECT teacherid, count(*) as lectures FROM `ttresponsibility` where sub_group = 0
group by teacherid

SELECT teacherid, count(*) as tutorials FROM `ttresponsibility` where sub_group > 0
group by teacherid

我想将两者的结果合并到一个结果集中,例如

teacher    lectures   tutorials

1           15         10
2           14         8

请建议...

4

4 回答 4

4

您可以将聚合函数与CASE表达式一起使用:

select teacherid,
  sum(case when sub_group = 0 then 1 else 0 end) lectures,
  sum(case when sub_group > 0 then 1 else 0 end) tutorials
from `ttresponsibility`
group by teacherid;

这将为您提供 3 列,teacherId然后是单独的列中的总讲座和教程。

于 2013-06-17T15:13:03.033 回答
1

这依赖于 COUNT 忽略 NULL(CASE 表达式中缺少 ELSE)

SELECT
   teacherid,
   count(CASE WHEN sub_group = 0 THEN 1 END) as lectures
   count(CASE WHEN sub_group > 0 THEN 1 END) as tutorials 
FROM
   `ttresponsibility`
group by teacherid
于 2013-06-17T15:13:27.327 回答
0

与其他人提供的几乎相同的解决方案,但具有 IF 功能:

    SELECT
        teacherid,
        SUM(IF(sub_group = 0, 1, 0)) as lectures,
        SUM(IF(sub_group > 0, 1, 0)) as tutorials,
    FROM ttresponsibility
    GROUP BY teacherid

对我来说更容易阅读

于 2013-06-17T15:20:35.560 回答
0

您可以使用CASE语句在这里得到您想要的。

SELECT
    teacherid,
    SUM(CASE WHEN sub_group = 0 THEN 1 ELSE 0 END CASE) as lectures,
    SUM(CASE WHEN sub_group > 0 THEN 1 ELSE 0 END CASE) as tutorials,
FROM ttresponsibility
GROUP BY teacherid
于 2013-06-17T15:15:39.400 回答