选择第一个字母字符的出现总和

时间:2014-10-29 06:06:58

标签: oracle oracle11g

我需要做的是创建一个select语句,输出表中字段中第一个字符的总和,使输出看起来像

A,12
B,0
C,20
D,14
E,0
ect...

该表被称为联系人,在上面有12个人的名字以字母A开头

我希望我已经正确解释了

2 个答案:

答案 0 :(得分:2)

让我们通过EMP表示例来理解这一点。

SQL> with
  2      letters
  3      as
  4      (select chr( ascii('A')+level-1 ) letter
  5         from dual
  6      connect by level <= 26
  7      )
  8  SELECT substr(ename, 1, 1) AS init_name,
  9  count(*) cnt
 10  FROM emp
 11  WHERE substr(ename, 1, 1) IN (SELECT letter from letters)
 12  GROUP BY substr(ename, 1, 1)
 13  UNION
 14  SELECT l.letter AS init_name,
 15  0 cnt
 16  FROM letters l
 17  WHERE l.letter NOT IN (SELECT substr(ename, 1, 1) FROM emp)
 18  ORDER BY init_name
 19  /

I        CNT
- ----------
A          2
B          1
C          1
D          0
E          0
F          1
G          0
H          0
I          0
J          2
K          1
L          0
M          2
N          0
O          0
P          0
Q          0
R          0
S          2
T          1
U          0
V          0
W          1
X          0
Y          0
Z          0

26 rows selected.

SQL>

因此,它会给出每个姓名字母的count,而对于名字中不存在的其他字母,计数为0

答案 1 :(得分:1)

使用connect生成26个字母,然后将其连接到名称的第一个字母并计算它们:

select letter, count(name) count
from (select chr(ascii('A')+level-1) letter from dual connect by level < 27) l
left join emp on substr(name, 1, 1) = letter
group by letter order by 1

请参阅SQLFiddle

归因:我生成字母的技巧使用Lalit's answer的元素。