2010-07-27 96 views
-1

我得到了一個快速mysql查詢的技能測試。我給出的表格:艱難的Mysql查詢

Orders     OrderItems 
----------------------------------------     
    id       id 
    date      order_id(Orders.id) 
    shipping_amount   product_id 
    order_status    price 
    customer_id    quantity 

我需要顯示訂單ID和總數(包括運輸量)和記錄之前的6月1日,2003年

輸出應該是...

| OrderID | OrderTotal | 
+-----------+------------+ 
| 13230  | $55.00  | 
| 54455  | $40.00  | 
| 59694  | $33.04  | 
| 39495  | $21.05  | 

提示是使用Group by或subselect。到目前爲止我有以下陳述,但不知道接下來要做什麼。

Select id AS OrderId,***(not sure what to do here) 
from Orders join OrderItems on Orders.id=OrderItems.id 
+0

所掌握的技術在這裏被測試? – recursive 2010-07-27 01:13:54

+0

爲什麼不顯示如何獲得所有訂單總計,因此每個訂單ID將有多個總計。然後,一旦你顯示出來,它可能會更有意義,以幫助指導你,但是,你有沒有閱讀mysql手冊上的選擇語句?畢竟這是一個考驗。 – 2010-07-27 01:18:15

+0

我明白測試是測試。我經常寫mysql查詢,但我沒有機會處理這種複雜的查詢。我希望在這個問題上得到一些提示。感謝您的建議,儘管...我一定會閱讀手冊 – FatDeveloper 2010-07-27 01:25:02

回答

4

我沒有訪問mysql數據庫進行測試,但我想它看起來是這樣的:

select 
    o.id OrderID, 
(select sum(oi.price * oi.quantity) from order_items oi where oi.order_id = o.id) + o.shipping_amount OrderTotal 
from 
    orders o 
where 
    o.date < str_to_date('2003-06-01', '%Y-%m-%d'); 
+0

MySQL日期恰好接受YYYY-MM-DD,因此您不必擔心解析它。 – Charles 2010-07-27 01:32:28

+1

@Charles:你不能認爲這是別人使用的格式 - 顯式轉換爲DATE/DATETIME/TIMESTAMP是最安全的方法。 +1,Brandon – 2010-07-27 01:42:02

+0

OKay,在這個*特定的情況下,你不需要擔心解析它。 :) – Charles 2010-07-27 02:13:47

2

我會說這一定是這樣的:

SELECT O.ID as OrderID, SUM(OI.price * OI.quantity) AS OrderTotal 

FROM Orders O 

INNER JOIN OrderItems OI ON O.id = OI.order_Id 

WHERE date < '2003-06-01' 

GROUP BY O.id 

ORDER BY SUM(price * quantity) DESC 

不知道如何在MySQL雖然格式化日期,或者您可以通過在此版本的agregate功能訂單,但我敢肯定這是一個好的開始。

+0

+1:假設OP要查看ordertotal爲零的訂單,請將INNER JOIN更改爲LEFT JOIN,並使用COALESCE將NULL更改爲零。 – 2010-07-27 01:44:16

+0

謝謝David ... Reallyl對我很好... – FatDeveloper 2010-07-27 02:35:40

+0

一旦你做了幾個查詢,它會變得更容易:) – 2010-07-27 12:14:56