在 MySQL 中使用 Group by 和 Order by

Using Group by with Order by in MySQL

为什么这个 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);

ORDER BY Total更改为ORDER BY SUM(quantityOrdered)

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