2017-10-29 11 views
-2
select *, sum(sales_qty) as total_qty 
from sales_details 
left join sales on sales.salesid=sales_details.salesid 
where month(sales.sales_date)='$m' 
group by productid order by total_qty asc limit 2, 4 

私は昇順にソートされたSQLを持っています。今度は、結果を降順でソートする必要があります。サブクエリを使用しようとしましたが、私のためには機能しません。助けや助言をいただければ幸いです。ASCオーダーからDESCオーダーへのMySQLサブクエリ

これは、私が試してみましたsqlです:サブクエリと

select * from (
     select *, sum(sales_qty) as total_qty 
     from sales_details 
     left join sales on sales.salesid=sales_details.salesid 
     where month(sales.sales_date)='$m' 
     group by productid 
     order by total_qty asc 
     limit 2, 4 
    ) as sub 
order by sum(sales_qty) desc 
+0

'asc'キーワードを' desc'に置き換えてみませんか? – Mureinik

+0

私は最初に降順でソートしました。結果を降順でソートします。 –

+0

あなたの質問に問題を付けるには、右に長距離のスクロールが必要でした。そのため、SOボランティアが見つけにくくなりました。私は改行を含むようにあなたの質問を再フォーマットしました。読みやすいようにSQLクエリを書式設定することは、一般的には良い考えです。 –

答えて

1

あなたのクエリが

... ORDER BY sales_qty DESC 

なぜを終了する必要がありますか? ... ORDER BY SUM(sales_qty) DESCと言うときは、外側のクエリを集約クエリに変換しています。その外部集合クエリにはGROUP BY句がないため、必ず1行の結果セットがあります。

外部クエリは、内部クエリをテーブルのように扱います。つまり、仮想テーブルです。その仮想テーブルにはsales_qtyという名前の列があります。それはあなたが注文したい値です。

Proのヒント:集計クエリでSELECT *を使用しないでください。あなたは、悪名高い非標準MySQLエクステンションをGROUP BYに誤用しています。つまり、結果セットに予測できない値が含まれています。これを読む。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

関連する問題