2017-08-25 30 views
0

這是表我:SQL ORDER BY - 爲什麼它不在這裏工作?

+---------------------+--------+----------+ 
| date    | sku | quantity | 
+---------------------+--------+----------+ 
| 2017-08-23 14:58:00 | 123333 |  2 | 
| 2017-08-23 14:58:00 | 123333 |  1 | 
| 2017-08-23 14:58:00 | 123333 |  1 | 
| 2017-08-23 14:58:00 | 123337 |  2 | 
| 2017-08-23 14:58:00 | 123335 |  1 | 
| 2017-08-23 14:58:00 | 123331 |  1 | 
| 2017-08-23 14:58:00 | 123332 |  2 | 
| 2017-08-23 14:58:00 | 123333 |  1 | 
| 2017-08-23 14:58:00 | 123334 |  1 | 
| 2017-08-23 14:58:00 | 123334 |  3 | 
+---------------------+--------+----------+ 

我想如下執行select語句:

select sku,sum(quantity) as 'total quant' from transactions 
where DATE(date) between '2017-07-23' and '2017-09-23' 
group by sku 
order by quantity desc; 

但我得到這個:

+--------+-------------+ 
| sku | total quant | 
+--------+-------------+ 
| 123332 | 2   | 
| 123337 | 2   | 
| 123333 | 5   | 
| 123334 | 4   | 
| 123335 | 1   | 
| 123331 | 1   | 
+--------+-------------+ 

哪一項不是按我期待的順序排列。 爲什麼訂單不在這裏工作?

邊注quantity列的數據類型爲int的,我已經試過鑄造在this post但無濟於事建議。

+0

難道你不想通過總量來訂購嗎? –

+0

該ORDER BY無效。應該引發錯誤... – jarlh

+0

執行'ORDER BY'total quant'desc'。 – jarlh

回答

6

您正在按數量訂購。因爲它沒有被聚合,所以你從每個組中獲得一個任意值。您需要按總數訂購。一種方法是:

order by sum(quantity) desc 

不過,我會建議分配合理的別名(一個不需要進行轉義),並使用:

select sku,sum(quantity) as total_quantity 
from transactions 
where DATE(date) between '2017-07-23' and '2017-09-23' 
group by sku 
order by total_quantity desc; 
+0

我明白了,但爲什麼它不承認'秩序'總量子 ''?爲什麼逃跑失敗? – JWizard

+0

感謝您的解釋,但是您可能會在「每個組的任意值」上畫燈。你的意思是給變量'quantity'賦予一些不在resulset中的值嗎? – JWizard

+1

@Giovanrich您應該使用反引號來轉義列名和別名。單引號創建文字字符串。請參閱https://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks – Barmar

2

您需要通過SUM(quantity)來訂購。

SELECT sku, SUM(quantity) AS 'total quant' 
FROM transactions 
WHERE DATE(date) BETWEEN '2017-07-23' AND '2017-09-23' 
GROUP BY sku 
ORDER BY SUM(quantity) DESC; 
+0

這工作,感謝您的快速反應 – JWizard

0

你應該使用:

order by sum(quantity) 
相關問題