2014-01-07 76 views
0

我有3個表,Orders,Orders_products和Orders_total。目前我有一個查詢可以獲得每個月的產品總和,但是現在我們還想添加不同表中的運費。加入表中的列的總和

我嘗試用以下方法返回正確的total_value,但total_shipping是5倍大。我認爲這個訂單已經到期了,可以有多重產品,但我不知道還有什麼可以做的。

SELECT Count(DISTINCT O.orders_id)    AS Orders, 
     Sum(OP.final_price * OP.products_quantity) AS total_value, 
     Date_format(O.last_modified, '%m-%Y')  AS date_interval, 
     Sum(OT.value)        AS total_shipping 
FROM 
     orders AS O 
LEFT JOIN 
     orders_total AS OT 
ON (OT.orders_id = O.orders_id 
AND OT.class = 'ot_shipping'), 
     orders_products AS OP 
WHERE 
     (O.orders_id = OP.orders_id) 
     AND (O.orders_status = 3) 
GROUP BY date_interval 
ORDER BY O.last_modified DESC 

返回的值是:

+----+------------+---------------+----------------+ 
| ID | total_value| date_interval | total_shipping | 
+----+------------+---------------+----------------+ 
| 17 | 55912.2160 | 01-2014 |  24954  | 

預計:

+----+------------+---------------+----------------+ 
| ID | total_value| date_interval | total_shipping | 
+----+------------+---------------+----------------+ 
| 17 | 55912.2160 | 01-2014 |  4938  | 

這裏是sqlfiddle http://sqlfiddle.com/#!2/dfe10/1/0

它包含一個順序,有3種款產品在裏面。預期的total_value是500,預期的total_shipping也是500,但返回1500(3 x個產品)。可惜的是我不得不從我的桌子上刪除很多字段,因爲限制了最多8000個字符的sqlfiddle。

+2

節目表,如果你可以.. –

+0

@SajadLfc我西港島線揣摩如何genrate表的一些文本的意見,但他們都具有應該使它們之間可以建立關係的orders_id –

+0

Order_total的值中有什麼確切的值? –

回答

2

嘗試把航運價值爲內嵌視圖:

select count(*) as Orders, 
sum(ord.order_total_value) as total_value, 
ord.date_interval as date_interval, 
sum(ship.order_shipping_value) as total_shipping 
from 
(
SELECT O.orders_id, 
     O.last_modified AS modified_date, 
     Sum(OP.final_price * OP.products_quantity) as order_total_value, 
     Date_format(O.last_modified, '%m-%Y') as date_interval 
FROM orders AS O 
     INNER JOIN orders_products AS OP on O.orders_id = OP.orders_id 
WHERE O.orders_status = 3 
GROUP BY date_interval,O.orders_id 
) ord LEFT OUTER JOIN 
(
SELECT orders_id,sum(value) as order_shipping_value 
FROM orders_total 
WHERE class='ot_shipping' 
GROUP BY orders_id 
) ship ON ord.orders_id = ship.orders_id 
GROUP BY ord.date_interval 
ORDER BY modified_date DESC; 
+0

我已經添加一個sqlfiddle我的問題 –

+0

謝謝。已經修改我的答案 - 應該做的竅門 –

+0

從orders_total中選擇我添加WHERE類='ot_shipping'只能得到運費,它似乎工作。 –