질문1. 서울시 어느 구 에 가장 많은 학교가 밀집해 있는가?
문제1. 학년의 학생수를 남/녀 별로 합계를 내어 남자가 0 면 여자학교, 여자가 0명이면 남자학교로 둘 다 값이 존재
하면 공학으로 구분하여 학교타입 하나의 뷰를 생성하시오. 그리고 그 학교 타입에 따른
S_TYPE (학교종류) 의 갯수를 내어 LISTAGG 로 갯수가 높은 순으로 나열하시오.
학교 타입 별로 S_TYPE 의 갯수를 내어 LISTAGG 로 갯수가 높은 순 으로 순위랑 나열하시오
================================테이블 생성 스크립트==================================
CREATE TABLE school
(s_name VARCHAR2(100),
eddress VARCHAR2(100),
esta VARCHAR2(20),
s_type VARCHAR2(20),
address VARCHAR2(150),
class_1 NUMBER(10),
class_2 NUMBER(10),
class_3 NUMBER(10),
class_s NUMBER(10),
boy_1 NUMBER(10),
girl_1 NUMBER(10),
boy_2 NUMBER(10),
girl_2 NUMBER(10),
boy_3 NUMBER(10),
girl_3 NUMBER(10));
질문1.
SELECT ad_gu,학교수, dense_RANK() OVER (ORDER BY 학교수 desc) 순위
from
(SELECT regexp_substr(address, '[^ ]+[구]') ad_gu,COUNT(regexp_substr(address, '[^ ]+[구]')) 학교수
FROM SCHOOL
GROUP BY regexp_substr(address, '[^ ]+[구]'));
< 뷰쿼리 >
CREATE VIEW VIEW_S
AS
SELECT CASE WHEN GIRL = 0 THEN '남자'
WHEN BOY = 0 THEN '여자'
ELSE '공학' END 학교타입,S_TYPE
FROM
(SELECT GIRL_1+GIRL_2+GIRL_3 GIRL, BOY_1+BOY_2+BOY_3 BOY,S_TYPE
FROM SCHOOL)
질문 1.
많은 부모님들이 자신의 자녀를 소위 상급학교 라는 곳에 진학 시키고 싶어하는 마음에 특정 구 에 몰리는 경향이 있다.
과연 그러한 특정구에 많은 학교가 밀집해있는지, 반면 다른 구에 많은 학교가 밀집해 있는지 궁금하여 데이터를 수집하였다.
그 결과 노원구에 25개의 고등학교가 RANK 함수를 통해 검색되었다. 즉, 가장 많은 학교가 밀집해 있는 구는 노원구 였다.
첫댓글 select 학교타입, listagg(s_type||'('||순위||')',',') within GROUP(ORDER BY 순위 asc) 학교종류
FROM(select 학교타입, s_type, RANK() OVER(PARTITION BY 학교타입 ORDER BY cnt desc) 순위
FROM(SELECT 학교타입, s_type, COUNT(*) cnt
FROM view_s
GROUP BY 학교타입, s_type))
GROUP BY 학교타입;
(짝짝짝짝)
SELECT 학교타입, listagg(s_type||'('||r||')', ', ') within GROUP (ORDER BY r ) 학교종류
FROM(
SELECT 학교타입, s_type, RANK() OVER (PARTITION BY 학교타입 ORDER BY COUNT(3) desc) r
FROM view_s
GROUP BY 학교타입, s_type)
GROUP BY 학교타입;
GROUP BY 학교타입;
SELECT 학교타입, listagg(S_type||'('||순위||')',',') within GROUP( ORDER BY 순위) from
(SELECT 학교타입,S_type,DENSE_RANK()OVER(PARTITION BY 학교타입 ORDER BY COUNT(s_type) desc) 순위,count(S_type) FROM VIEW_S
GROUP BY s_type,학교타입)
group BY 학교타입;
SELECT 학교타입,
listagg(s_type||'('||순위||')',',')within GROUP(ORDER BY 순위) "학교종류"
FROM(SELECT 학교타입, s_type,수,RANK()OVER(ORDER BY 수 desc) 순위
from(SELECT 학교타입,s_type,COUNT(*) 수
FROM view_S
GROUP BY s_type,학교타입) )
group BY 학교타입;
CREATE VIEW Wtake2
AS
SELECT m_type,S_type, year,필기응시증가량,DENSE_RANK() OVER(PARTITION BY year ORDER BY 필기응시증가량 desc) 필기순위
FROM LICENSEMS2_in;
CREATE VIEW ptake2
AS
SELECT m_type,S_type, year,실기응시증가량,DENSE_RANK() OVER(PARTITION BY year ORDER BY 실기응시증가량 desc) 실기순위
FROM LICENSEms2_in;
SELECT DISTINCT l.year,(select l_type FROM Wtake w WHERE w.year=l.year AND 필기순위 = 1) 필기종목,
(select 필기응시증가량 FROM Wtake w WHERE w.year=l.year AND 필기순위 = 1) 필기증가량,
(select l_type FROM ptake p WHERE p.year=l.year AND 실기순위 = 1) 실기종목,
(select 실기응시증가량 FROM ptake p WHERE p.year=l.year AND 실기순위 = 1) 실기증가량
FROM LICENSE_in l
ORDER BY year;