web-dev-qa-db-ja.com

Join、Count、Whereを使用したSQLクエリ

2つのテーブルがあり、作業を節約するために1つのクエリを実行しようとしています。

_Table 1: id, category id, colour
Table 2: category id, category name
_

_id, category id, category name, colour_が得られるように参加したい

次に、「赤」の項目が選択されないように制限します(_WHERE colour != "red"_)次に、各カテゴリのレコード数をカウントします(COUNT(id) GROUP BY (category id)。

努力しています:

_SELECT COUNT(table1.id), table1.category_id, table2.category_name 
FROM table1 
INNER JOIN table2 ON table1.category_id=table2.category_id 
WHERE table1.colour != "red"
_

しかし、それはうまくいきません。私は多くのバリエーションを試しましたが、上記のクエリを試しても結果が得られません。

11
Watters

GROUP BYを使用する必要があるため、複数のレコードが返されます。

SELECT  COUNT(*) TotalCount, 
        b.category_id, 
        b.category_name 
FROM    table1 a
        INNER JOIN table2 b
            ON a.category_id = b.category_id 
WHERE   a.colour <> 'red'
GROUP   BY b.category_id, b.category_name
26
John Woo
SELECT COUNT(*), table1.category_id, table2.category_name 
FROM table1 
INNER JOIN table2 ON table1.category_id=table2.category_id 
WHERE table1.colour <> 'red'
GROUP BY table1.category_id, table2.category_name 
4
Nenad Zivkovic

私はサブクエリを使用しましたが、うまくいきました!

SELECT *,(SELECT count(*) FROM $this->tbl_news WHERE
$this->tbl_news.cat_id=$this->tbl_categories.cat_id) as total_news FROM
$this->tbl_categories
1
Karthick