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。现在我希望结果按降序排序。我尝试过使用子查询但不适合我。任何帮助或建议表示赞赏。
这是我尝试过的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 :(得分: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