在MySQL中使用groupby和orderby

在MySQL中使用groupby和orderby,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,为什么此SQL查询显示语法错误: SELECT orderNumber, SUM(quantityOrdered) AS 'Total' FROM orderdetails GROUP BY orderNumber ORDER BY quantityOrdered; 但是 以下查询未显示语法错误,并给出正确的结果: SELECT orderNumber, SUM(quantityOrdered) AS 'Total' FROM orderdetails GROUP BY orderNumber

为什么此SQL查询显示语法错误:

SELECT orderNumber, SUM(quantityOrdered) AS 'Total'
FROM orderdetails
GROUP BY orderNumber
ORDER BY quantityOrdered;
但是 以下查询未显示语法错误,并给出正确的结果:

SELECT orderNumber, SUM(quantityOrdered) AS 'Total'
FROM orderdetails
GROUP BY orderNumber
ORDER BY Total;
此查询:

SELECT od.orderNumber, SUM(od.quantityOrdered) AS Total
FROM orderdetails od
GROUP BY od.orderNumber
ORDER BY od.quantityOrdered;
是指
ORDER BY
子句中的
quantityOrdered
。但是,
ORDER BY
只能在数据聚合后运行。因此,每行汇总了每行的多个
quantityOrdered
。SQL不知道您指的是哪一个,您会得到一个错误

例如,您的数据可能是:

A     1
A     5
B     3
聚合后,它看起来像:

A     6
B     3
没有
quantityOrdered
,只有
Total

要解决此问题,可以使用列别名或聚合函数:

ORDER BY SUM(od.quantityOrdered);

orderbytotal
更改为
orderbysum(quantityOrdered)

我认为查询结果中没有一列名为
quantityOrdered
。结果的第二列是函数
SUM
的结果,它不同于原始列
quantityOrdered
。这就是为什么当您将结果的别名
用作'Total'
时,它起了作用。

除了以下语句:“因此,每行有多个quantityOrdered”我得到了所有。@AK。我改变了措辞。谢谢。。。。。。我注意到没有“quantityOrdered”列,而是别名。因此,这意味着最终执行的订单条款。。。。。。。在处理查询并创建结果表之后?