如何为列指定名称 - Oracle SQL

时间:2013-11-02 20:48:46

标签: sql oracle variables

我需要根据起始字母对列进行分组,然后计算从相应字母开始的列数。这很容易,但我的问题是,如何为列设置名称,这样你就不必多次写同一个东西?

这是我的代码:

SELECT substr(p_nev,1,1) firstLetter, count(substr(p_nev,1,1))
from pizza
group by substr(p_nev,1,1)
order by substr(p_nev,1,1) desc;

注意我必须写substr(p_nev,1,1)4次,所以我想用firstLetter(或某个变量名)以某种方式替换它。

所以这是最优雅的方式吗?

SELECT substr(p_nev,1,1) firstLetter, count(*)
from pizza
group by substr(p_nev,1,1)
order by firstLetter desc;

3 个答案:

答案 0 :(得分:2)

您可以使用内部选择

包装查询
select fl, count(*) 
  from (select substr(p_nev,1,1) fl
          from pizza) 
group by fl
order by fl desc;

在我的练习中,优化器始终足够精细,可以根据执行计划使这些查询等效

答案 1 :(得分:1)

您应该可以使用count(*)代替count(substr(p_nev,1,1))order by firstLetter代替order by substr(p_nev,1,1)。您将不得不拼出group by子句,因为选择列表中的别名会在查询分组后发生。

答案 2 :(得分:1)

作为替代方案,您还可以使用公用表表达式:

with letters as (
   SELECT substr(p_nev,1,1) as firstLetter
   from pizza
)
select firstletter, count(*) as cnt
from letters
group by firstletter
order by firstletter desc;

公用表表达式(以with letters ..开头的部分)的行为类似于派生表(“在运行中查看”),如果您需要在更大的表格中多次使用它,则会特别方便查询。

表现明智,对于alko的答案没有区别。