2016-02-05 22 views
0

我的查詢基於炒鍋表(三個部分)的結果應該是13000,但我得到39000應用DISTINT不工作

# Order table 

------------------------------------------- 
| Id | order    | Name | Fee | 
------------------------------------------- 
| 1 | SELECT STATEMENT | ab | 13000 | 
------------------------------------------- 

# Work table 
----------------------------- 
| Id | user id | order id | 
----------------------------- 
| 1 | 123 | 1  | 
| 2 | 123 | 1  | 
| 3 | 123 | 1  | 
----------------------------- 


# Query 
SELECT o.order_id, SUM(o.fee) AS total_words 
FROM users AS u 
LEFT JOIN works AS wr ON wr.user_id = u.id 
LEFT JOIN orders AS o ON o.order_id = wr.order_id 
    WHERE u.id = 123 

# Output =>  
Array 
(
    [order_id] => 1 
    [fee] => 39000 
) 

我試圖總結DISTINCT費然後分組,但是我得到相同的結果。

+2

你的表的別名都搞砸了。用於「a」的別名是什麼表? –

+0

Cheers @SameerMirji它的'user' as'u' – Fury

+0

因爲(user_id,order_id)不是唯一的,所以'works'表的數據是你的結果的三倍。 「GROUP BY」只會幫助你,如果你是在'work.id'上組合的話。# – Uueerdo

回答

1

SQL Fiddle Demo

SELECT `user_id`, SUM(orders.`Fee`) 
FROM (SELECT DISTINCT `user_id`, `order_id` 
     FROM works 
    ) as user_work 
JOIN orders 
    ON user_work.`order_id` = orders.`Id` 
WHERE user_work.user_id = 123 

輸出

| user_id | SUM(orders.`Fee`) | 
|---------|-------------------| 
|  123 |    13000 | 
+0

乾杯隊友,這就是你如何做到這一點 – Fury