带有联接、计数和位置的 SQL 查询
Posted
技术标签:
【中文标题】带有联接、计数和位置的 SQL 查询【英文标题】:SQL Query with Join, Count and Where 【发布时间】:2013-07-19 01:15:12 【问题描述】:我有 2 个表,我正在尝试做一个查询来节省一些工作。
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"
但这只是行不通。我尝试了很多变体,但在尝试上述查询时却没有得到任何结果。
【问题讨论】:
【参考方案1】:我用过子查询,效果很好!
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
【讨论】:
【参考方案2】: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
【讨论】:
【参考方案3】:您必须使用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
【讨论】:
以上是关于带有联接、计数和位置的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章