如何在此查询中的GROUP BY之前执行SELECT?

rd2*_*d22 3 mysql sql oracle

我正在查看SQL执行的顺序,我发现它是:

FROM,
WHERE,
GROUP BY,
HAVING,
SELECT,
ORDER BY
Run Code Online (Sandbox Code Playgroud)

但是在下面的查询中,GROUP BY中使用了"_index",这怎么可能?

SELECT COUNT(ab.id) AS count, COUNT(ab.id)/365.24 AS average,
    IF((SUBSTR(ab.begin, 1, 7) = '2014-08'), '2014-08-18 00:00:00.0 CEST',
    IF((SUBSTR(ab.begin, 1, 7) = '2014-09'), '2014-09-18 00:00:00.0 CEST',
    IF((SUBSTR(ab.begin, 1, 7) = '2014-10'), '2014-10-18 00:00:00.0 CEST',
    IF((SUBSTR(ab.begin, 1, 7) = '2014-11'), '2014-11-18 00:00:00.0 CET',
       '0')))) AS _index
FROM active_begin AS ab 
INNER JOIN asources AS a ON a.id = ab.asource AND a.unit IN (4, 3, 1) 
WHERE (1408226400000 <= ab.begin_time AND ab.begin_time < 1417388400000)
GROUP BY _index
Run Code Online (Sandbox Code Playgroud)

PS.请订购以下内容:http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm 提前致谢.

Thi*_*ilo 5

我认为这(使用 SELECT子句中为GROUP BY定义的列别名能力)可能是某些数据库允许的非标准扩展(但不是全部).

您应该再次重复确切的定义或将所有内容包装在子选择中.

幸运的是,如果你的数据库让你逃脱它.