一尘不染

SQL SUM和COUNT返回错误的值

sql

我发现了一堆类似的问题,但对我没有任何帮助,或者我太愚蠢,无法正确地进行操作。如果我使用 COUNT(DISTINCT visits.id)
,则访问计数工作正常,但投票计数完全错误-它显示的值比应有的大小大3到4倍。

所以这是查询

SELECT SUM(votes.rating), COUNT(visits.id)
FROM topics
LEFT JOIN visits ON ( visits.content_id = topics.id )
LEFT JOIN votes ON ( votes.content_id = topics.id )
WHERE topics.id='1'
GROUP BY topics.id

表看起来像这样

id int(11) | rating tinyint(4) | content_id int(11) | uid int(11)

访问

id int(11) | content_id int(11) | uid int(11)

主题

id int(11) | name varchar(128) | message varchar(512) | uid int(11)

帮助?


阅读 138

收藏
2021-05-16

共1个答案

一尘不染

基本上,您是在累加或计数可能返回的总行数。因此,如果每个id有3次访问和4票,则访问次数将乘以4,而票数将乘以3。

我认为可以通过使用子查询来最轻松地实现您想要的内容:

SELECT (SELECT SUM(v.rating) FROM votes v WHERE v.content_id = t.id), 
       (SELECT COUNT(vi.id) FROM visits vi WHERE vi.content_id = t.id)
FROM topics t
WHERE t.id=1 
GROUP BY t.id
2021-05-16