본문 바로가기
TechNical/Oracle

오라클 심심풀이용 SQL문 퀴즈

by 강멍멍이 2008. 2. 20.
반응형
scott이 가지고 있는 EMP 테이블을 가지고 장난질을 좀 쳐 보기로 합시다.
EMP테이블에는 hiredate라고 입사년도가 있습니다.
그걸 가지고~ 아래와 같은 모양으로 출력되게 해 봅시다~

      TOTAL         1980           1981          1982         1987
---------- ---------- ---------- ---------- ----------
            15              1              10              2              1











잠시 생각하셨나요? ㅎㅎ

굳이 옆으로 출력할 필요가 없다면 간단하게 이런식으로 출력할 수 있습니다.

SQL> select to_char(hiredate,'YYYY'),count(*) from emp
        group by to_char(hiredate,'YYYY');

TO_C   COUNT(*)
---- ----------
1980          1
1981         10
1982          2
1983          1





그럼 잠시 또 생각을 해 보시고... ㅎㅎ





다른 방법도 많이 있겠지만 케이씨는 이렇게 해 봤습니다.

SQL>  select (select count(*) from emp) "TOTAL",
  2  (select count(*) from emp where to_char(hiredate,'YYYY')='1980') "1980",
  3  (select count(*) from emp where to_char(hiredate,'YYYY')='1981') "1981",
  4  (select count(*) from emp where to_char(hiredate,'YYYY')='1982') "1982",
  5  (select count(*) from emp where to_char(hiredate,'YYYY')='1987') "1987"
  6  from dual;

      TOTAL         1980           1981          1982         1987
---------- ---------- ---------- ---------- ----------
            15              1              10              2              1

이거이거.. 쌩 노가다 같다는 느낌이... ㅡㅡ;;;
좀 쉬운 방법은 없을까요??

--------------------------------------------------------------------------------------------------

댓글 달아 주신 오라클님 감사합니다 ^-^
작성해 주신 SQL을 오라클에 돌려보니 살짝 오류가 생겨서리 정상적으로 돌아 가도록 쬐금 고쳤습니다.
괄호치고 0하나 더 찍어 준거 밖에는.. ㅎㅎ;;
아무튼.. 이런 방법이 있다구 하네요. 훨씬 간결하고 보기 좋은 걸요 ^0^

select count(*) total
, count(decode(to_char(hiredate,'yyyy'),'1980',0)) "1980"
, count(decode(to_char(hiredate,'yyyy'),'1981',0)) "1981"
, count(decode(to_char(hiredate, 'yyyy'),'1982',0)) "1982"
, count(decode(to_char(hiredate, 'yyyy'),'1983',0)) "1983"
from emp;


역시나 이래저래 공부 열심히 해야 겠습니다 ^^;;
반응형

댓글