我有两个表格,一个包含一组提案,另一个在提案上投票,两者都加入了唯一的ID。
提案表在提案开始时有一个日期字段,投票有投票的日期。当提出足够的投票时,该提案被标记为“成功”。我想知道平均关闭投票需要多少天。
我最初的方法是创建一个查询,通过左连接列出最近投票的每个提案:
SELECT proposals.pr_id, DATEDIFF(MAX(proposals_votes.`date`), proposals.`date`)
FROM proposals
LEFT JOIN proposals_votes ON proposals.pr_id = proposals_votes.pr_id
WHERE STATUS = 'success'
问题是这只返回一行,这对我来说是一个惊喜。我原以为MAX是在LEFT JOIN表上完成的,而不是在结果表上完成的。
有没有办法在LEFT JOIN中执行此操作,还是需要进行子查询?
答案 0 :(得分:1)
使用 pr_id 上的GROUP BY
条款为每个提案提取天数
试试这个:
SELECT p.pr_id, DATEDIFF(MAX(pv.`date`), p.`date`)
FROM proposals p
LEFT JOIN proposals_votes pv ON p.pr_id = pv.pr_id
WHERE pv.status = 'success'
GROUP BY p.pr_id;
答案 1 :(得分:1)
如果你想要多行,你应该使用GROUP BY,因为聚合函数总是只返回一行。您将通过GROUP BY参数获得多行结果,例如GROUP BY proposals.pr_id。
SELECT
proposals.pr_id,
DATEDIFF(MAX(proposals_votes.date),proposals.date)
FROM
proposals
LEFT JOIN
proposals_votes ON proposals.pr_id = proposals_votes.pr_id
WHERE
STATUS = 'success'
GROUP BY proposals.pr_id;