2017-08-25 4 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   | 
+--------+-------------+ 

されていないが私が期待している順序でここで働いていないのはなぜですか?

SIDE注マイquantity列は、データ型intのだと私はthis postではなく、無駄に示唆されているようにキャストしようとしています。

+0

代わりにtotal quantで注文したくありませんか? –

+0

ORDER BYは無効です。エラーを発生させる必要があります... – jarlh

+0

'ORDER BY '総量' 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

私はそれを持っていましたが、なぜそれは 'order by 'total quant ' 'を認識しませんか?なぜそれがエスケープで失敗しますか? – JWizard

+0

説明してくれてありがとうございます。しかし、あなたは '各グループの任意の値 'を明示するかもしれません。あなたは変数 'quantity'に値を割り当てられていると思いますか? – 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) 
関連する問題