繁体   English   中英

将ORDER BY应用于UNION MYSQL

[英]Apply ORDER BY to UNION MYSQL

我正在尝试在UNION的组合中使用ORDER BY表达式,并且收到错误

“ ORDER BY的表达式#1包含聚合函数并适用于UNION”。

(SELECT 'SELECT' AS argument, count(argument) 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%"))
ORDER BY count(argument) ASC;

正确的语法是

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

编辑

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

这足以让我在rextester上建立一个可行的例子。

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;

您可以看到我在上面链接的同一个月中的操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM