【问题标题】:Apply ORDER BY to UNION MYSQL将 ORDER BY 应用于 UNION MYSQL
【发布时间】:2017-11-02 07:07:39
【问题描述】:

我正在尝试在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;

【问题讨论】:

    标签: mysql sql join sql-order-by union


    【解决方案1】:

    正确的语法是

    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;
    

    您可以在我上面链接的同一个 rextester 中看到这一点

    【讨论】:

    • 嗨,我收到错误“每个派生表都必须有自己的别名”
    • 谢谢,但是类似的错误“ORDER BY 的表达式 1 包含聚合函数并应用于非聚合查询的结果”
    • 成功了,非常感谢。为什么 MySql 要求我们使用这个别名呢?
    • 我不知道,对不起。很高兴它有所帮助:)
    猜你喜欢
    • 2014-05-30
    • 1970-01-01
    • 2011-12-20
    • 2016-11-22
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多