簡體   English   中英

MySQL:SUM連接表值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM