2016년 7월 28일 목요일

[IT실무고급교육★탑크리에듀][서브쿼리/조인/GROUP BY/EXISTS SQL퀴즈예제]


[서브쿼리/조인/GROUP BY/EXISTS SQL퀴즈예제]

- 프로그래밍언어별(programming_name) 프로그래머 수를 출력하세요.
  (모든 프로그래밍 언어 표시, programming_name 오름차순)


PROGRAMMING_NAME        COUNT(B.PROGRAMMER_ID)
----------------------- ----------------------
C                              1
C#                            1
JAVA                          2
PYTHON                        0


select a.programming_name, count(b.programmer_id)
  from programming a left outer join programmer b
on a.programming_id = b.programming_id
group by a.programming_name
order by programming_name asc

select a.programming_name, count(b.programmer_id)
  from programming a, programmer b
where a.programming_id = b.programming_id(+)
group by a.programming_name
order by a.programming_name asc

- NOT EXISTS를 사용하여 개발자가 한명도 없는 프로그래밍언어이름(programming_name)을 출력하세요.

PROGRAMMING_NAME
-------------------
PYTHON

select programming_name
  from programming a
where not exists (select 1 from programmer b
                  where a.programming_id = b.programming_id)
                 
- NOT IN을 이용하여 프로그래머가 한명도 없는 프로그래밍언어이름(programming_name)을 출력하세요.                   

PROGRAMMING_NAME
-------------------
PYTHON

select programming_name
  from programming a
where a.programming_id not in (select programming_id from programmer b
                                where a.programming_id = b.programming_id)
                 

- JAVA 프로그래머의 이름을 출력하세요.

PROGRAMMER_NAME
---------------
김길동
헐길동

select programmer_name
  from programmer
where  programming_id =  (select programming_id from programming
                          where programming_name = 'JAVA')


- 프로그래밍이름(programming_name)별, product의 수, product의 최대가격(price)을
  출력하세요.
 
 PNAME            CNT    MAXPRICE
---------------- ---------- ----------
C#                1        3000
JAVA              2        2000
C                  2        3000


- 프로그래머 경력3년 이상인 사람이 만든 Product을 구입한 고객의 이름을 출력하세요.

CUSTOMER_NAME
---------------
4번고객

select customer_name
  from customer a1
where customer_id in (
                      select customer_id
                        from product_order a,
                            product b,
                            programmer c
                      where a.product_id = b.product_id
                        and c.programmer_id = b.programmer_id
                        and c.career >= 3                   
                    )


- 프로그래밍언어별, product_name별 주문건수 합계를 출력하세요.

programming_name  product_name  cnt
------------------------------------------------------
C#             ANDROID APP     2
JAVA           SHOPPING MALL       7
C               iOS APP             1
JAVA             ERP                     1

select programming_name,
      product_name,
      sum(cnt) cnt
from  programming a, programmer b, product c, product_order d
where  a.programming_id = b.programming_id
  and  b.programmer_id = c.programmer_id
  and  c.product_id = d.product_id
group by programming_name, product_name


- product_name별, 주문년도별 주문금액 합계를 출력하세요.
  (단 주문금액합계가 5000 이상인 데이터만,
  주문내역이 없는 product_name도 출력 하세요.)
 
PRODUCT_NAME        NVL(TO_ NVL(TO_C
-------------------- ------- --------
ANDROID APP          2015      6,000
SHOPPING MALL        2016      14,000 
 
select product_name,
      nvl(to_char(order_date,'yyyy'),'no data'),
      nvl(to_char(sum(price*cnt),'999,999'), 0)
from  product a, product_order b
where a.product_id = b.product_id(+)
group by product_name, to_char(order_date,'yyyy')
having sum(price*cnt) >= 5000

- 세로축은 product_name별, 가로축은 주문년도를 "2015년", "2016년"으로 구성하여
  product_name별, 년도별 주문건수를 집계하세요.(주문건수가 없으로 0으로 표시)

product_name  2015년 2016년
---------------------------
ERP             0   1
ANDROID APP     2   0
SHOPPING MALL   0   7
iOS APP         1   0 

select product_name,
      nvl(sum(decode(to_char(order_date,'yyyy'),'2015',cnt)),0) "2015년",
      nvl(sum(decode(to_char(order_date,'yyyy'),'2016',cnt)),0) "2016년"
  from product a, product_order b     
where  a.product_id = b.product_id
group by product_name
     


- product_name별 구입한 고객의 이름을 콤마(,)로 구분하여 하나의 칼럼에 출력하세요.
  (고객의 이름은 오름차순 정렬)

product_name  customer_name
---------------------------
ANDROID APP   4번고객
ERP           1번고객
SHOPPING MALL 2번고객,3번고객
iOS APP       5번고객

select product_name,
      listagg(customer_name, ',') within group(order by customer_name) customer_name
 from  customer a, product b, product_order c     
where  a.customer_id = c.customer_id
  and  b.product_id = c.product_id
group by product_name

댓글 없음:

댓글 쓰기