MariaDB的ORDER BY子句不按升序排序?

时间:2017-11-13 23:26:21

标签: sorting mariadb

我有以下简单的SQL,它是针对我的MariaDB数据库执行的。

预期的行为是结果按“天” ASCENDING 排序。但是,执行时,结果将按 DESCENDING 顺序排序。很奇怪。

SELECT *
FROM
(
    SELECT `day`,`count` 
    FROM 
    (
        SELECT 
            DATE(`date`) AS `day`,
            COUNT(*) as `count` 
        FROM `message` m
        GROUP BY DATE(`date`)
        ORDER BY `day` DESC, `count` DESC
    ) AS q 
    ORDER BY `day` ASC
) AS q

如果我在内部查询中注释掉ORDER BY ,则外部ORDER BY可以正常工作,并以升序顺序对结果进行排序而不会出现问题。

我遇到的问题是内部循环中的代码是生成代码,因此我无法删除内部ORDER BY。

为什么MariaDB会以这种方式行事?有没有办法改变外部ORDER BY,以便获得优先权?

注意:我使用的是MariaDB版本:10.0.24-MariaDB

1 个答案:

答案 0 :(得分:0)

所以,我把它解决了。

根据MariaDB,SQL标准不要求遵守子查询的ORDER BY(除非它会影响返回的实际行):

https://mariadb.com/kb/en/library/why-is-order-by-in-a-from-subquery-ignored/

如果我将ORDER BY移动到外部查询,那么它按预期工作。