[英]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.