从ASC订单到DESC订单的MySQL子查询

时间:2017-10-29 09:03:15

标签: mysql

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

1 个答案:

答案 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