2017-07-05 7 views
2

サブカテゴリ数がカウントされているすべてのカテゴリを選択する必要があります。サブカテゴリ数がCOUNTであるすべてのカテゴリを選択

ここで想定は私のテーブルです:

カテゴリ

id | title 
---------- 
1 | colors 
2 | animals 
3 | plants 

sub_categories

id | category_id | title | confirmed 
------------------------------------ 
1  1   red  1 
2  1   blue  1 
3  1   pink  1 
4  2   cat  1 
5  2   tiger  0 
6  2   lion  0 

私は何をしたいことは次のとおりです。

id | title | count 
------------------ 
1 colors  3 
2 animals 1 
3 plants  0 

私がこれまで試してみました何:

SELECT c.id, c.title, count(s.category_id) as count from categories c 
LEFT JOIN sub_categories s on c.id = s.category_id 
WHERE c.confirmed = 't' AND s.confirmed='t' 
GROUP BY c.id, c.title 
ORDER BY count DESC 

このクエリでの唯一の問題は、このクエリが0のサブカテゴリーとカテゴリーが表示されないということです!

また、任意のヘルプは素晴らしいいただければ幸いSqlFiddle

にそれを確認することができます。あなたはゼロカウントと行を得ることはありません

+1

「where」条件を「left join」に移動します。 –

答えて

4

理由はWHERE句は、このように外部結合結果からNULL sの行を排除し、tするs.confirmedをチェックするということです。この問題を解決するための式に参加するに

移動s.confirmedチェック:

SELECT c.id, c.title, count(s.category_id) as count from categories c 
LEFT JOIN sub_categories s on c.id = s.category_id AND s.confirmed='t' 
WHERE c.confirmed = 't' 
GROUP BY c.id, c.title 
ORDER BY count DESC 

SQLのフィドルを追加:http://sqlfiddle.com/#!17/83add/13

2

を私はあなたが(それはあなたが本当にグループ化されているものを、カラム(複数可)証拠あまりにもこれを試すことができると思いますby:):

SELECT c.id, c.title, RC 
from categories c 
LEFT JOIN (SELECT category_id, COUNT(*) AS RC 
      FROM sub_categories 
      WHERE confirmed= 't' 
      GROUP BY category_id) s on c.id = s.category_id 
WHERE c.confirmed = 't' 
ORDER BY RC DESC 
関連する問題