使用计数值连接两个表

时间:2014-12-22 08:28:47

标签: sql postgresql

我有以下两个表:

items:
id    pr1  pr2
--------------
1     11   22
...

以及与项目相关的评论表:

comments:
item_id text
------------
1 "cool"
1 "very good"
...

现在我想要一个包含item_id pr1 pr2 count(comments)列的表格。获得它的最佳方法是什么?谢谢!

2 个答案:

答案 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

使用DISTINCTCOUNTcomments的每一行tags只会{{1}}一次,而{{1}}也是如此。