with num
as
(select level as digit
from dual
connect by level < 8)
select substr(mail_num, digit,1) 숫자, count(*)
from email_number e, num n
where substr(mail_num, digit,1) is not null
group by substr(mail_num, digit,1)
order by 2 desc;
0이 가장 많이 사용되었다.,
dual이 아닌 테이블에서 level을 출력하면 행의수^(레벨수) 만큼 결과가 출력되므로 dual문을 조인하여 결과를 출력할 수있다.
왜냐면 레벨한개가 출력된 이후, 그 레벨에서 다음 레벨이 출력되기 떄문이다.
ex) connect by <5:
행이 4개인 테이블에서 레벨 1 출력 -> 레벨1 4개 = 모든 행 16개
레벨1이 부여된 행들에 레벨 2 출력 => 레벨2 16개 = 모든 행 20개
레벨2가 부여된 행들에 레벨3 출력 => 레벨3 64개 = 모든 행 64+20=84개
레벨3이 부여된 행들에 레벨4 출력 => 레벨4 256개 = 모든행 84+256
dept 테이블 예시)
select count(*), level
from dept d
connect by level<5
group by level;
ex) select level, count(*)
from email_num
connect by level <3
group by level
order by 1 asc;
level 2 = 27x27=729
dual이 아닌 테이블에서 level 문장을 출력하려면 다른 조건을 걸어야 한다.
첫댓글 select level, count(*)
from dept
connect by level < 4
group by level;
1 4
2 16
3 64
레벨이 올라갈수록 테이블 건수의 4배씩 값이 증가되고 있음
그래서 단순히 증가되는 숫자만 제공해주면 되므로
select substr(mail_num, digit,1) 숫자, count(*)
from email_number e, (select level as digit
from dual
connect by level < 8) n
where substr(mail_num, digit,1) is not null
group by substr(mail_num, digit,1)
order by 2 desc;