스터디 인원에 대한 개인별 스터디 가입현황을 조회하고자 합니다.
1. 테이블은 3개입니다. ID 성명 스터디 1차 2차 3차 참여횟수 001 김개똥 Database O O 2 Java O 1 002 이말똥 Database O O O 3 Java 0 003 박소똥 Database 0 Java O O 2 004 강닭똥 Database O 1 Java 0
- 스터디학생(student), 스터디과목(course), 스터디마스터(study)
2. 작성 조건
- 학생별로 2개행씩(스터티과목수) 조회되어야 합니다.
- ID와 성명은 2행중 첫번째 행만 출력합니다.
- 스터디 차수별로 가입여부에 '○'표로 표시합니다. 3차까지 표시.
- 과목별 참여건수를 표시합니다.
- 서브쿼리 없이 작성하세요.
3. 결과
4. 다음 with절을 이용하여 작성해 보세요.
WITH student AS
(
SELECT '001' s_id, '김개똥' s_nm FROM dual
UNION ALL SELECT '002', '이말똥' FROM dual
UNION ALL SELECT '003', '박소똥' FROM dual
UNION ALL SELECT '004', '강닭똥' FROM dual
)
, course AS
(
SELECT '001' c_id, 'Database' c_nm FROM dual
UNION ALL SELECT '002', 'Java' FROM dual
)
, study AS
(
SELECT '001' s_id, '001' c_id, 1 chasu FROM dual
UNION ALL SELECT '001', '001', 3 FROM dual
UNION ALL SELECT '001', '002', 2 FROM dual
UNION ALL SELECT '002', '001', 1 FROM dual
UNION ALL SELECT '002', '001', 2 FROM dual
UNION ALL SELECT '002', '001', 3 FROM dual
UNION ALL SELECT '003', '002', 1 FROM dual
UNION ALL SELECT '003', '002', 2 FROM dual
UNION ALL SELECT '004', '001', 1 FROM dual
)
-- 이곳에 들어갈 쿼리를 작성해 주세요.
SELECT CASE WHEN b.c_id = '001' THEN a.s_id END AS "ID"
, CASE WHEN b.c_id = '001' THEN a.s_nm END AS "성명"
, b.c_nm AS "스터디"
, MIN(CASE WHEN c.chasu = 1 THEN '○' END) AS "1차"
, MIN(CASE WHEN c.chasu = 2 THEN '○' END) AS "2차"
, MIN(CASE WHEN c.chasu = 3 THEN '○' END) AS "3차"
, COUNT(c.s_id) AS "참여횟수"
FROM student a
CROSS JOIN course b
LEFT OUTER JOIN study c
ON a.s_id = c.s_id
AND b.c_id = c.c_id
GROUP BY a.s_id, a.s_nm, b.c_id, b.c_nm
ORDER BY a.s_id, b.c_id
-- 이곳에 들어갈 쿼리를 작성해 주세요.