[英]MAX() value on a LEFT JOIN
我有2张桌子,一张桌子有一套提案,一张桌子对提案投了票,两张桌子都有唯一的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中执行此操作,还是需要执行子查询?
使用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;
如果要多行,则应使用GROUP BY,因为聚合函数始终只返回一行。 您将通过GROUP BY参数(例如GROUP BY proposal.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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.