将ORDER BY应用于UNION MYSQL

将ORDER BY应用于UNION MYSQL,mysql,sql,join,sql-order-by,union,Mysql,Sql,Join,Sql Order By,Union,我试图在我的联合组合中使用ORDER BY表达式,我收到了错误 “ORDER BY的表达式#1包含聚合函数并应用于并集” 正确的语法是 select * from ( query 1 union query 2 union query 3...) order by x 编辑 您还缺少计数和外部查询的别名。最后的查询应该如下所示 这对我来说已经足够树立一个成功的榜样了 不过,有一个更简单的解决方案,您可以使用,因为参数的长度都相同: select substring(upper(argumen

我试图在我的
联合
组合中使用
ORDER BY
表达式,我收到了错误

“ORDER BY的表达式#1包含聚合函数并应用于并集”

正确的语法是

select * from
( query 1 union query 2 union query 3...)
order by x
编辑

您还缺少计数和外部查询的别名。最后的查询应该如下所示

这对我来说已经足够树立一个成功的榜样了

不过,有一个更简单的解决方案,您可以使用,因为参数的长度都相同:

select  substring(upper(argument), 1, 6) as argument, count(*) as cnt
from    mysql.general_log
group by substring(upper(argument), 1, 6)
order by cnt asc;

您可以看到,在我上面链接的同一个rextester中,我遇到了一个错误“每个派生表都必须有自己的别名”感谢,但类似的错误“ORDER BY表达式1包含聚合函数并应用于非聚合查询的结果”,非常感谢。为什么MySql要求我们使用这个别名呢?对不起,我不知道。但很高兴它有所帮助:)
SELECT argument, cnt from
(
    (SELECT 'SELECT' AS argument, count(argument) as CNT FROM mysql.general_log WHERE 
    argument LIKE ("SELECT%"))
    UNION
    (SELECT 'INSERT' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("INSERT%"))
    UNION
    (SELECT 'UPDATE' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("UPDATE%"))
    UNION
    (SELECT 'DELETE' AS argument, count(argument) FROM mysql.general_log WHERE 
    argument LIKE ("DELETE%"))
) aa
ORDER BY cnt ASC;
select  substring(upper(argument), 1, 6) as argument, count(*) as cnt
from    mysql.general_log
group by substring(upper(argument), 1, 6)
order by cnt asc;