在 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'
它起作用了。
为什么这个 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'
它起作用了。