[英]Mysql: SUM joined table value
我對joins和SUM()
有問題。
我有兩個表, agents(id, name)
和orders(id, agent_id, total)
。
現在,我需要一個列出所有代理商的清單,這些清單計算了他們下達的訂單數量以及所有訂單的總數。 這是我的基本查詢:
SELECT
agents.*,
COUNT(DISTINCT orders.id) total_orders,
SUM(orders.total) total_amount
FROM agents
LEFT JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id
total_orders
是正確的,但total_amount
不正確。 每個代理都有錯誤的SUM()
,甚至那些沒有訂購任何東西的代理都有價值。
一個查詢有可能嗎? 我不想再次循環查詢。
您不需要左連接,用LEFT JOIN
代替LEFT JOIN
JOIN
:
SELECT
agents.*,
COUNT(DISTINCT orders.id) total_orders,
SUM(orders.total) total_amount
FROM agents
JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id
你得到的是由一個事實,即左連接將檢索訂單表中的一行導致即使沒有記錄有相同agents.id的AGENT_ID錯誤的結果
另一方面,單次連接不會檢索沒有訂單的座席。
哦,那么您需要所有座席,並為那些沒有訂單的總要為0 ...然后,左聯接應該起作用。 否則,您可以這樣做:
SELECT
agents.*,
COUNT(DISTINCT orders.id) total_orders,
SUM(CASE WHEN orders.id IS NULL then 0 ELSE orders.total END) total_amount
FROM agents
LEFT JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.