0

と の 2 つの列を持つテーブルがありteacheridますsub_group。現在、sub_group は 0 から 100 の範囲の値を持つことができます。0 は教師向けの講義を意味し、0 より大きい値はチュートリアルを意味します。教師ごとにグループ化された講義とチュートリアルの数を計算できるようにしたい。

これまでのところ、次のような2つのクエリがあります

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

2つの結果を1つの結果セットに結合したい.

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

これは、NULL を無視する COUNT に依存しています (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 に答える