ORDER BY trim(field) 在服务器上工作,而不在其他服务器上工作
ORDER BY trim(field) works on a server and not on other
我有这个问题:
SELECT count(DISTINCT trim(level1)) cnn
FROM table1
WHERE f1 != -1
ORDER BY trim(level1);`
它在一个数据库上完美运行,在另一个典型数据库上运行:
ORDER BY trim Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with
no GROUP columns is illegal if there is no GROUP BY clause
当我删除 ORDER BY trim(level1)
时它工作正常。
谁能解释一下为什么?我正在使用 MySQL.
MySQL 允许您 运行 非标准 SQL 查询,其中 SELECT 列表、HAVING 条件或 ORDER BY 列表引用非聚合列。
在您的查询中,您按非聚合列排序:
SELECT count(DISTINCT trim(level1)) cnn
FROM table1
WHERE f1 != -1
ORDER BY trim(level1)
因为你没有分组依据,在标准 SQL 中你只能按 count(DISTINCT trim(level1))
排序,但你按 trim(level1)
排序,这不是聚合(它的目的是什么无论如何?)。
在一台服务器上运行而另一台服务器不运行的原因是一台服务器禁用了 ONLY_FULL_GROUP_BY(因此查询将 运行),而另一台服务器启用了它。
有关标准 SQL92、标准 SQL99 以及 MySql 如何处理的完整说明,请参阅此手册页:MySQL Handling of GROUP BY
我有这个问题:
SELECT count(DISTINCT trim(level1)) cnn
FROM table1
WHERE f1 != -1
ORDER BY trim(level1);`
它在一个数据库上完美运行,在另一个典型数据库上运行:
ORDER BY trim Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
当我删除 ORDER BY trim(level1)
时它工作正常。
谁能解释一下为什么?我正在使用 MySQL.
MySQL 允许您 运行 非标准 SQL 查询,其中 SELECT 列表、HAVING 条件或 ORDER BY 列表引用非聚合列。
在您的查询中,您按非聚合列排序:
SELECT count(DISTINCT trim(level1)) cnn
FROM table1
WHERE f1 != -1
ORDER BY trim(level1)
因为你没有分组依据,在标准 SQL 中你只能按 count(DISTINCT trim(level1))
排序,但你按 trim(level1)
排序,这不是聚合(它的目的是什么无论如何?)。
在一台服务器上运行而另一台服务器不运行的原因是一台服务器禁用了 ONLY_FULL_GROUP_BY(因此查询将 运行),而另一台服务器启用了它。
有关标准 SQL92、标准 SQL99 以及 MySql 如何处理的完整说明,请参阅此手册页:MySQL Handling of GROUP BY