0

私はテーブルを持っています

students[std_id, name, class, gender,etc]

select class,gender,count(*) as total_students 
from students 
group by class,gender

その出力は以下のとおりです

 1st | male   | 23   
 1st | female | 11   
 2nd | male   | 17   

 2nd | female | 0   

// 2番目のクラスの女子学生が0人であるため、最後の行は表示されません

レコードをスキップする代わりに、total_sudents=0で上記のように表示する方法。

4

2 に答える 2

4

これを行うには、性別ごとにクエリを作成し、それらを結合します。

select class, 'male' as gender, 
    count(case when gender = 'male' then 1 end) as total_students 
from students 
group by class

union all

select class, 'female' as gender, 
    count(case when gender = 'female' then 1 end) as total_students 
from students 
group by class

または、次のようにすることもできます。

select class, 
    count(case when gender = 'male' then 1 end) as total_male_students,
    count(case when gender = 'female' then 1 end) as total_female_students  
from students 
group by class
于 2012-08-14T07:34:22.583 に答える
2

このソリューションを使用します。

SELECT    a.class,
          a.gender,
          COUNT(b.class) AS total_students
FROM      (
          SELECT     a.class, 
                     b.gender
          FROM       students a
          CROSS JOIN (
                     SELECT 'male' AS gender UNION ALL 
                     SELECT 'female'
                     ) b
          GROUP BY   a.class, 
                     b.gender
          ) a
LEFT JOIN students b ON a.class = b.class AND 
                        a.gender = b.gender
GROUP BY  a.class,
          a.gender
于 2012-08-14T07:35:06.390 に答える