1

カテゴリと、カテゴリ内のスレッド数のカウントを表示するSQLクエリを作成しようとしています。

これは私が得たものです:

SELECT categories.category_name, categories.category_id, COUNT(*) 
AS 'threadCount' FROM threads 
    RIGHT OUTER JOIN categories 
    ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id

それはちょっと機能しますが、スレッドがない場合でも、threadCountの結果は常に1以上になります。

ここに画像の説明を入力してください

上の画像でわかるように、すべてのカテゴリにスレッドが添付されているようです。ただし、「カテゴリ1」にのみスレッドがあり、他のすべてのカテゴリには0のスレッドが接続されているため、1ではなく0を表示する必要があります。

4

2 に答える 2

1

結合には、Outerスレッドに接続されていないカテゴリも含め、すべてのカテゴリが含まれているため、少なくとも1つあります。

SELECT categories.category_name, categories.category_id, COUNT(*) 
AS 'threadCount' FROM threads 
    RIGHT OUTER JOIN categories 
    ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id

私はそれを作ります、

SELECT categories.category_name, categories.category_id, 
    (SELECT COUNT(*) FROM threads WHERE 
      categories.category_id = threads.thread_category_id) AS 'threadCount' 
FROM categories 

ここでは、接続せずに、各カテゴリのスレッドを直接カウントします。

于 2013-03-08T08:22:51.843 に答える
0

右外部結合を実行しているため、対応するスレッドがない場合、nullも1としてカウントされます。次のようにクエリを実行して、私が何を意味しているかを確認します

SELECT categories.category_name, categories.category_id
AS 'threadCount' FROM threads 
    RIGHT OUTER JOIN categories 
    ON categories.category_id = threads.thread_category_id

または、次のようにクエリを変更することで、1としてカウントされるnullを除外できます。

SELECT categories.category_name, categories.category_id, COUNT(threads.thread_category_id) 
AS 'threadCount' FROM threads 
    RIGHT OUTER JOIN categories 
    ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
于 2013-03-08T08:20:45.373 に答える