在MySQL中使用groupby和orderby
为什么此SQL查询显示语法错误:在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
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”列,而是别名。因此,这意味着最终执行的订单条款。。。。。。。在处理查询并创建结果表之后?