我需要做的是创建一个select语句,输出表中字段中第一个字符的总和,使输出看起来像
A,12
B,0
C,20
D,14
E,0
ect...
该表被称为联系人,在上面有12个人的名字以字母A开头
我希望我已经正确解释了
答案 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的元素。