【发布时间】:2014-10-23 04:31:08
【问题描述】:
我一直在尝试编写一个 sql 查询来从 bugzilla 获取一些统计信息。这是查询
select bugs.bug_id AS bug_id,
COUNT(map_pingpong.bug_when) AS re_open,
MAX(map_closetime.bug_when) AS closed_date
from bugs
LEFT JOIN bugs_activity AS map_pingpong
ON ((map_pingpong.bug_id = bugs.bug_id
and map_pingpong.fieldid=15))
LEFT JOIN bugs_activity AS map_closetime
ON ((bugs.bug_id = map_closetime.bug_id
and map_closetime.fieldid=8
and bugs.bug_status = 'CLOSED' ))
where (bugs.assigned_to = 480)
GROUP BY bugs.bug_id
ORDER BY bug_id;
所以,查询应该返回两件事
1) 发生事件的计数 2) 事件发生的日期
因此,当我将查询分成两个不同的查询时,它们会返回正确的值。如果我按上述方式运行它,则计数值是错误的(尽管日期是正确的)。我不应该在同一张桌子上运行两个连接吗?或者 count 不应该在你使用 join 时出现?
【问题讨论】:
-
你不能在代码 sn-p 中运行 SQL,它只适用于 Javascript。
-
当您运行两个连接时,您会得到两个表的笛卡尔积,
count()将计算积中的行数。 -
你可以使用
COUNT(DISTINCT map_pingpong.some_unique_column)解决它 -
抱歉添加代码 sn-p.. 我认为这样查询会更便于阅读:)