2017-03-23 18 views
1

誰でも以下の条件のsqlとsqliteクエリを手伝ってもらえますか?具体的には、2つのカテゴリのマージされたカウントを表示したかったのです。SQLの条件付きカウント

**Table** 
Category Sub_category 
    A    1 
    A    2 
    A    2 
    B    1 
    C    1 
    C    1 
    C    2 
    D    1 
    D    1 
    D    1 
    D    2 
    D    3 
**Required Output** 
    Category Sub_category Count **condition(not part of o/p just instruction)** 
     A    1   1  - 
     A    2+   2  -  
     B    1   1  -  
     C    1   2  - 
     C    2+   1  - 
     D    1   3  -  
     D    2+   1 should contain the count of 2 and more 

私は以下の使用して同じことを達成することができる午前:

select Category, 
     count(CASE WHEN Sub_category = 1 THEN Sub_category END) AS '1', 
     count(CASE WHEN Sub_category >= 2 THEN Sub_category END) AS '2+' 
    from table 

ただし出力は、したがって第1出力のみを探して少し異なっています。

**Output** 
Category 1 2+ 
    A  1 2 
    B  1 0 
    C  1 2 
    D  3 2 

ありがとうございます!

あなたが欲しい
+1

は 'Sub_category> = 2'を使用してください。 –

答えて

2

select Category, 
     (case when sub_category = 1 then '1' else '2+' end) as sub_category, 
     count(*) 
from table 
group by Category, 
     (case when sub_category = 1 then '1' else '2+' end); 

あなたがいない列として、上のサブカテゴリグループを配置する、です。

+0

正しいが、2+の代わりに私はNAを得る:( –

0

ただ1つの列が欠落しています。合計を取得するためにフィルタリングせずに最後のカウントを追加してください:

select Category, 
    count(CASE WHEN Sub_category = 1 THEN Sub_category END) AS '1', 
    count(CASE WHEN Sub_category >= 2 THEN Sub_category END) AS '2+', 
    count(*) 
    from table 
    group by Category, count(CASE WHEN Sub_category = 1 THEN Sub_category END), count(CASE WHEN Sub_category >= 2 THEN Sub_category END), count(*) 
+0

ありがとう、あなたは素晴らしいです! –