프로그래머스 SQL 고득점 Kit 연습풀이입니다. 모든 문제의 저작권은 프로그래머스에게 있으며 문제가 됐을 시 삭제하겠습니다.
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit
문제순서
1) 서울에 위치한 식당 목록 출력하기(lv4)
2) 특정 세대의 대장균 찾기 (lv4)
3) 멸종위기의 대장균 찾기 (lv5)
문제이름 : 서울에 위치한 식당 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131118
문제풀이
1) from: 테이블 명칭 간소화 + inner join을 해준다
2) 서울에 있는 식당 뽑으려고 where을 썼다
3) order by: 내림차순 정렬
4) select: 결과화면 보고 열 선택, 평균 구하는 건 avg, 반올림하는건 round함수를 써준다
SELECT A.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS,
ROUND(AVG(REVIEW_SCORE),2) AS SCORE
FROM REST_INFO AS A LEFT OUTER JOIN REST_REVIEW AS B
ON A.REST_ID = B.REST_ID
WHERE ADDRESS LIKE "%서울%"
ORDER BY SCORE DESC, FAVORITES DESC
하지만,,, 집계함수를 쓰면 group by having 필수... 맨날 까먹
전체코드
SELECT A.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS,
ROUND(AVG(REVIEW_SCORE),2) AS SCORE
FROM REST_INFO AS A INNER JOIN REST_REVIEW AS B
ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID
HAVING ADDRESS LIKE "서울%"
ORDER BY SCORE DESC, A.FAVORITES DESC
문제이름: 특정 세대의 대장균 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/301650
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1) 3세대를 찾으면 된다는 말에 join 3번 하면 되겠다 했다 >> 처음에 where 절로 계속했는데 3번하다보니까 헷갈려서
지난번에 활용한 WITH 새로운테이블명 AS ( ) 를 사용하기로 했다.
2) 1세대 뽑기(PARENT가 없는걸 뽑으면 된다)
WITH G1 AS (
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
),
SELECT ID FROM G1 ORDER BY ID;
2) 2세대뽑기
1세대의 ID와 2세대의 PARENT_ID가 똑같은 걸 뽑아준다.
3) 3세대도 동일하게 뽑아주낟.
전체코드
WITH G1 AS (
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
),
G2 AS (
SELECT B.ID
FROM ECOLI_DATA AS B INNER JOIN G1
ON B.PARENT_ID = G1.ID
),
G3 AS (
SELECT B.ID
FROM ECOLI_DATA AS B INNER JOIN G2
ON B.PARENT_ID = G2.ID
)
SELECT ID FROM G3 ORDER BY ID;
다른분들의 풀이..
1) 서브쿼리 2번(내가 헷갈려서 못한거)
2) 그냥 바로 JOIN 똑같이;; 내꺼 코드가 너무 길어서 // 프로그래머스 질의응답의 " Hyeonjeong Kim" 님의 풀이다
SELECT A.id
FROM ecoli_data A
JOIN ecoli_data B ON A.parent_id = B.id
JOIN ecoli_data C ON B.parent_id = C.id
WHERE C.parent_id IS NULL;
3) RECURSIVE CTE 사용 .. 이해는 했으나 따라하지 못할듯 >> 바로 lv5에 나와서 다시 읽어보았습니다
문제이름: 멸종위기의 대장균 찾기
문제풀이
전체코드
'[코테준비] > [코테준비]SQL' 카테고리의 다른 글
SQL 고득점 kit - GroupBy Lv2 (0) | 2024.08.11 |
---|---|
SQL 고득점 kit - Sum, Max, Min (0) | 2024.08.04 |
SQL 고득점 kit - Select Lv3 (1) | 2024.07.12 |
SQL 고득점 Kit - SELECT Lv2 (1) | 2024.07.09 |
SQL 고득점 Kit - SELECT Lv1(2) (1) | 2024.07.07 |