我刚刚继承了一个代码库,并且存在一个不正确的现有查询。它看起来像(泛型化表这里&列):Mysql - 2个计数在一个查询中,第二个计数结果不好
select p.user_id, p.photo_id, p.date, count(p.photo_id) as 'Photos', count(v.photo_id) as 'Views'
from photos p
LEFT OUTER JOIN userviews v on v.user_id = p.user_id and v.photo_id = p.photo_id
where p.photo_id in (1,2,3 [...])
GROUP BY photo_id, user_id
ORDER BY user_id, photo_id
结果集是接近正确,如此接近,没有人注意到这是错误的一段时间。
如果表2(用户视图)中没有数据,则生成的行是正确的。
但是,如果有数据在那里,结果集从表1中重复计数值,即:
1082 3381 2012-05-25 08:50:20 3 3 <--WRONG, should be 1
1082 3387 2012-07-26 15:02:36 2 2 <--WRONG, should be 4
1117 3381 2012-05-23 03:46:02 1 0 <--CORRECT
1117 3382 2012-05-23 03:45:54 1 0 <--CORRECT
1117 3383 2012-05-23 03:45:09 1 0 <--CORRECT
现在,如果这是SQL服务器,我用刚刚改写该死的东西CTE,但Mysql不支持WITH子句,并且我不认为我可以通过子查询来返回多个值。
那么我该如何解决这个问题呢?在此先感谢,我难住这一个。当你不GROUP BY
你可以发布一些未聚合的示例数据吗? – Rachcha 2013-03-19 05:49:46