2012-01-21 69 views
1

我有訂單下表:關於訂單類型的大部分訂單(購買/退貨)的SQL查詢?

訂單:order_no(鍵),國際標準書號,數量,類型

ISBN:這本書的代碼, 數量:如何客戶訂購的很多書籍, 類型:要麼購買要麼退貨

我的目標是找到書(ISBN)與最暢銷。 這意味着我必須找到這些書的銷售,但 也算他們的回報。

例如: 買3本書的ISBN爲1010 買5本書的ISBN爲2020年, 回報3本書的ISBN爲2020

暢銷書:ISBN:1010

我試着使用此查詢:

"SELECT 
    ISBN, SUM(quantity) as sum 
FROM 
    orders 
GROUP BY 
    ISBN 
ORDER BY 
    sum DESC" 

但顯然它是錯誤的。

任何好主意?

回答

6
SELECT ISBN, SUM(CASE WHEN type = 'return' THEN -1 * quantity ELSE quantity END) as sum 
FROM orders 
GROUP BY ISBN 
ORDER BY sum DESC 
+0

不錯!謝謝Bassam Mehanni!這很好。我不知道使用「什麼時候」。 :) – FILIaS

+0

沒問題,很高興我可以幫助! –

+0

注意到更好...它返回的數組在DESC上帶有'sum'的順序。但不僅僅是「暢銷書」......如果有兩本相同總和的書,我怎麼知道(只考慮第一行)? – FILIaS

0

您正在總結購買和退貨,你應該區分它們。這樣的事情應該工作:

SELECT 
    ISBN, SUM(IF(type = 'buy', quantity, -quantity)) as sum 
FROM 
    orders 
GROUP BY 
    ISBN 
ORDER BY 
    sum DESC 
-1

我認爲這個問題可能與你的別名。這個工作對我來說:

SELECT ISBN, SUM(Qty) 
FROM orders 
GROUP BY ISBN 
ORDER BY SUM(Qty) 

你還應該包括像其中type =「買入」如果你不想在你做什麼來算回報的條款。