web-dev-qa-db-fra.com

Requête SQL avec Join, Count et Where

J'ai 2 tables et j'essaie de faire une requête pour me sauver du travail.

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

Je veux les rejoindre pour avoir id, category id, category name, colour

Ensuite, je veux le limiter afin qu'aucun élément "rouge" ne soit sélectionné (WHERE colour != "red") Ensuite, je veux compter le nombre d'enregistrements dans chaque catégorie (COUNT(id) GROUP BY (category id).

J'ai essayé:

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"

Mais cela ne fonctionne tout simplement pas. J'ai essayé de nombreuses variantes et je n'obtiens aucun résultat lorsque j'essaie la requête ci-dessus.

11
Watters

Vous devez utiliser GROUP BY donc vous aurez plusieurs enregistrements retournés,

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

J'ai utilisé la sous-requête et cela a très bien fonctionné!

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