-1

私のデータベース テーブルには、0 または 1 を保持する 2 つの列があります。

ここで、タイプは and を意味typeし、性別はandです。Gender0 => teacher1 => student0 => male1 => female

教師、生徒、男性、女性の数を取得する単一の SQL クエリを作成するにはどうすればよいですか?

今私は持っています:

select COUNT(type) as teachers from my_table where type = 0; // Teachers
select COUNT(type) as students from my_table where type = 1; // Students
select COUNT(gender) as males from my_table where type = 0; // Males
select COUNT(gender) as females from my_table where type = 1; // Females

1回のクエリで実行できますか? もしそうなら、どのように?

4

4 に答える 4

3

CASE関数を使用してそのために使用できますSUM

SELECT SUM(CASE type WHEN  1 THEN 1 ELSE 0 END) AS students,
       SUM(CASE type WHEN  0 THEN 1 ELSE 0 END) AS teachers,
       SUM(CASE gender WHEN 1 THEN 1 ELSE 0 END) AS females,
       SUM(CASE gender WHEN 0 THEN 1 ELSE 0 END) AS males
FROM my_table;

次のようCOUNTに代わりに関数を使用することもできます。SUM

SELECT COUNT(CASE type WHEN  1 THEN 1 ELSE NULL END) AS students,
       COUNT(CASE type WHEN  0 THEN 1 ELSE NULL END) AS teachers,
       COUNT(CASE gender WHEN 1 THEN 1 ELSE NULL END) AS females,
       COUNT(CASE gender WHEN 0 THEN 1 ELSE NULL END) AS males
FROM my_table;

このSQLFiddleを参照してください

于 2012-09-05T10:46:56.590 に答える
1

サブクエリを使用してこれを実現できます。

SELECT COUNT(type) AS students,
    (SELECT COUNT(type) FROM my_table WHERE type = 0) As teachers,
    (SELECT COUNT(gender) FROM my_table WHERE gender = 1) AS females,
    (SELECT COUNT(gender) FROM my_table WHERE gender = 0) AS males
FROM my_table WHERE type = 1;
于 2012-09-05T10:45:25.410 に答える
1

このようにして、単一のクエリでそれを行うことができます。テーブルに 2 種類のデータしかない場合は、句INで条件を指定する必要はありません。WHERE

SELECT SUM(IF(type = 1, 1, 0)) as students,
       SUM(IF(type = 0, 1, 0)) as teachers,
       SUM(IF(gender = 1, 1, 0)) as females,
       SUM(IF(gender = 0, 1, 0)) as males
FROM my_table
WHERE type IN(0,1)
      AND gender IN(0,1);
于 2012-09-05T10:42:33.880 に答える
0

はい、できます。それぞれの SQL ステートメントをまとめてみましたか?
SQL1 as fld1, SQL2 as fld2, someOtherFieldsIfNeeded FROM ...

于 2012-09-05T10:42:21.383 に答える