mysql - SQL加入一对多关系 - 计算每张图片的票数?

标签 mysql sql join

好的,所以我有 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() 函数来做到这一点,而我根本不知道?

最佳答案

您需要 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

关于mysql - SQL加入一对多关系 - 计算每张图片的票数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571270/

相关文章:

sql - POSTGRES 将周列转为行?

mysql - 每次创建表时间戳时都会自动添加 ON UPDATE

sql - 如何在DB2中执行复合sql

mysql - 苦苦挣扎于查询、加入、加入

mysql - 如何将多个 MySQL 列提取到 shell 脚本中的环境变量?

php - mysql数据库中的倒计时字段值

mysql - 如何在 mysql 中的 varchar 中执行 SQL 插入

mysql - 为什么这个 LEFT JOIN 消除了另一个表中没有任何内容的记录?

MySQL JOIN 子查询为假。子查询会执行吗?

mysql - 在mysql中对具有2集数的行进行排序