10

好的,所以我有 2 张桌子:

images                           votes
----------------------------     --------------------
image_id |  name | square_id     vote_id |  image_id
----------------------------     --------------------
1         someImg    14          1            45  
2         newImg     3           2            18     
3         blandImg   76          3            1 
...                              ...
n                                n

这是一对多的关系。每个图像可以有多个投票,但一个投票只能与一个图像相关。我正在尝试生成一个连接查询,该查询将显示图像 ID,以及它在指定条件下的投票数(例如,基于square_id)。因此查询结果看起来类似于:

query_result
----------------------
image_id |  vote_count
----------------------
18          46
26          32
20          18
...
55          1

但我能做的最好的就是:

query_result
----------------------
image_id |  vote_id
----------------------
18          46
18          45
18          127
26          66
26          43
55          1

看到问题了吗?每个image_id都被多次列出vote_id。这是产生这个的查询:

SELECT images.image_id, votes.vote_id 
  FROM votes JOIN images ON images.image_id=votes.image_id

我似乎无法创建一个vote_count列是该图像所有投票的总和。有什么方法可以让我使用该count()功能,而我根本不知道吗?

4

2 回答 2

7

您需要GROUP BY images.image_id并使用COUNT(votes.vote_id)

SELECT images.image_id, COUNT(votes.vote_id) AS cote_count
FROM votes 
JOIN images ON images.image_id=votes.image_id
GROUP BY images.image_id
于 2013-09-02T10:44:20.743 回答
1

GROUP BY使用聚合时通常需要使用,例如COUNT()

SELECT images.image_id, count(votes.vote_id) AS vote_count
  FROM votes 
  JOIN images ON images.image_id=votes.image_id
  GROUP BY images.image_id;

我不是 100% 清楚你的意思

以及它在特定条件下的投票数(例如,基于square_id)”?

您的模型似乎是square_id针对图像建模的,并且只能用作 上的where过滤器images,而不是投票和图像之间的关系。

于 2013-09-02T10:45:13.387 回答