我有以下两个表:
items:
id pr1 pr2
--------------
1 11 22
...
以及与项目相关的评论表:
comments:
item_id text
------------
1 "cool"
1 "very good"
...
现在我想要一个包含item_id pr1 pr2 count(comments)
列的表格。获得它的最佳方法是什么?谢谢!
答案 0 :(得分:3)
试试这个:
select items.id, items.pr1, items.pr2, count(*) as comment from items,comments where items.id = comments.item_id group by items.id
答案 1 :(得分:2)
只需在一个查询中执行此操作:
SELECT items.id,
items.pr1,
items.pr2,
COUNT(*) AS comment_count
FROM items
INNER JOIN comments
ON items.id = comments.item_id
GROUP BY items.id,
items.pr1,
items.pr2
修改强>:
如果所有未分组的列在功能上依赖于分组列,则看起来您只能按此列分组(如Yash所做的那样):
SELECT items.id,
items.pr1,
items.pr2,
COUNT(*) AS comment_count
FROM items
INNER JOIN comments
ON items.id = comments.item_id
GROUP BY items.id
请参阅:
编辑2 :
关于添加第二个表格(让我们选择tags
):
您不能继续COUNT
*
。试试这个:
SELECT items.id,
items.pr1,
items.pr2,
COUNT(DISTINCT comments.*) AS comment_count,
COUNT(DISTINCT tags.*) AS tags_count
FROM items
INNER JOIN comments
ON items.id = comments.item_id
INNER JOIN tags
ON items.id = tags.item_id
GROUP BY items.id,
items.pr1,
items.pr2
使用DISTINCT
,COUNT
中comments
的每一行tags
只会{{1}}一次,而{{1}}也是如此。