2017-10-29 88 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

爲什麼不用'desc'替換'asc'關鍵字? – Mureinik

+0

我首先在asc中對它進行排序以獲得至少4個total_qty,現在我想按desc順序對結果進行排序。 –

+0

在您的查詢中發現問題需要長距離滾動到右側,這使得志願者難以發現。我重新格式化了您的查詢以包含換行符。爲了便於閱讀,格式化SQL查詢通常是一個好主意。 –

回答

1

您與子查詢的查詢應該結束

... ORDER BY sales_qty DESC 

爲什麼?當您說... ORDER BY SUM(sales_qty) DESC您正在將外部查詢轉換爲聚合查詢。由於該外部聚合查詢沒有GROUP BY子句,因此它必須具有一行結果集。

外部查詢將內部查詢視爲表,虛擬表。該虛擬表具有名爲sales_qty的列。這是您想要訂購的價值。

專業提示:請勿在彙總查詢中使用SELECT *。你濫用臭名昭着的非標準MySQL擴展到GROUP BY,這意味着你的結果集包含不可預知的值。讀這個。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html