2016-10-18 10 views
2

同じテーブル内の異なるwhere句の値のカウントを取得しようとしています。 1は、そのMySQL select同じテーブルの異なるデータを集計するベスト・アプローチ

SELECT * FROM 
    (SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(1,3,7,9,10)) as 'a', 
    (SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(2,7,8,18)) as 'b' 

OR

SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(1,3,7,9,10) 
SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(2,7,8,18) 

注するための最良のアプローチです:表の値

+0

なぜ私は* WHERE id = 123'という条件で数えているのですか?あなたのidフィールドが一意である場合、カウント結果たった1つでも0でもかまいません。それが一意でなければ、少なくとも混乱して命名されます。 –

+0

@FranzGleichmannは別の列です。私は質問 – user3516704

+0

ああを編集します。今では外来キーを使って、それはもっと意味があります、明確化のためにありがとうございます。 –

答えて

4

の何百万人が含まれているあなたはそうせずに、1つのクエリでデータを取得するよう条件付き集約を使用することができますサブクエリ:

SELECT COUNT(CASE WHEN action_type IN(1,3,7,9,10) THEN id END) AS count_1, 
     COUNT(CASE WHEN action_type IN(2,7,8,18) THEN id END) AS count_2 
FROM table 
WHERE id = 123 
0

1回だけ実行されるため、最適化された方法

関連する問題