Ton*_*ews 45
它不仅仅是Oracle SQL,实际上我认为它符合ANSI SQL标准(尽管我没有参考).原因是SELECT子句在GROUP BY子句之后进行逻辑处理,因此在完成GROUP BY时,别名尚不存在.
也许这个有点荒谬的例子有助于澄清SQL避免的问题和模糊性:
SQL> select job as sal, sum(sal) as job
2 from scott.emp
3 group by job;
SAL JOB
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
Run Code Online (Sandbox Code Playgroud)
小智 14
我知道这是一个老线程,但似乎用户问题并没有真正解决; 这些解释很好地解释了为什么group by子句不允许你使用别名,但没有给出替代方案.
根据上面的信息,在select子句中的别名存储在内存中之前,不能在组中使用别名,因为group by先运行.因此,对我的观点起作用的简单解决方案是添加一个外部选择,它只选择别名,然后在同一级别进行分组.
例:
SELECT alias1, alias2, alias3, aliasN
FROM
(SELECT field1 as alias1, field2 as alias2, field3 as alias3, fieldN as aliasN
FROM tableName
WHERE ' ' = ' ')
GROUP BY alias1, alias2, alias3, aliasN
Run Code Online (Sandbox Code Playgroud)
一旦你看到解决方案就很直接,但是如果你想第一次自己弄清楚PITA的话.
这是我能够从case语句中"分组"派生字段的唯一方法,所以这是一个很好的技巧.