[코테준비]/[코테준비]SQL

SQL고득점KIT-Select Lv4.5

bestFinanceDataAnalyist 2024. 7. 14. 22:40

프로그래머스 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