0

ファーストネーム、ラストネーム、性別、国籍などを持つ人々のテーブルがあるとします。

男性の数と女性の数を数えたいです。

私は2つのSQLを行うことができます:

SELECT COUNT(id) FROM people WHERE sex = 'male'
SELECT COUNT(id) FROM people WHERE sex = 'female'

ただし、1つのクエリを実行できますか:

SELECT * FROM people

では「男」と「女」の出現回数を数えてみては?結果セット全体をループすることが唯一の方法ですか?

編集:私がこれを求めている理由は、パフォーマンスのためです。複数の JOIN があり、テーブル サイズが 2k 行を超えています。さらに、性別だけでなく、国籍、年齢、言語、その他多くの列もカウントします。

最小限のリソースを使用するアプローチを選択していることを確認したいだけです。クエリと PHP スクリプトの実行に時間がかかるのは望ましくありません。

ありがとう。

4

3 に答える 3

3

これを行うには、列をグループ化sexし、関数を使用して他の列を集計しCOUNT( )ます。

SELECT   sex, 
         COUNT(*) GenderCount
FROM     people
GROUP BY sex

PS: 列の名前を.. heheheGenderではなく変更してくださいsex

集計関数に関する追加情報HERE

于 2012-08-09T07:40:02.063 に答える
0
select SUM(sex='male') AS countmale, SUM(sex='female') AS countfemale from people
于 2012-08-09T07:38:48.967 に答える
0

出力を1行で取得するには、これを試すことができます:

SELECT SUM(IF(sex = 'male', 1, 0)) AS male_count,
       SUM(IF(sex = 'female', 1, 0)) AS fe_male_count
FROM people;

複数の行の出力を取得するには、これを試してください:

SELECT sex, COUNT(1) AS cnt
FROM people
GROUP BY sex;

GROUP BYただし、クエリは高速になると思います。

于 2012-08-09T07:38:51.417 に答える