본문 바로가기

SQL35

[Problem Solving] 프로그래머스 SQL 고득점 Kit: 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/298519 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr LENGTH 가 NULL인 물고기들은 10으로 취급해야 하기 때문에 IFNULL을 사용해서 결측값을 채운다. 물고기를 종류별로 그룹핑해서 평균길이가 33 이상인 것들만 필요로 하기 때문에, GROUP BY로 그룹핑한 후, HAVING 절로 평균 길이가 33 이상인 것 들만 추릴 수 있다. FISH_TYPE 그룹에 대해서 COUNT와 MAX 집계함수를 사용하면 그 그룹에 포함된 물고기의 수와, 가장 긴 물고기의 길이를 구할 수 있다. 정답 .. 2025. 8. 24.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/284528 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr HR_DEPARTMENT 테이블은 HR_EMPLOYEE와 DEPT_ID로 연관되어 있고, HR_EMPLOYEES 테이블은 HR_GRADE 테이블과 EMP_NO로 연관되어 있다. 이 필드들을 사용해서 테이블을 JOIN할 수 있다.JOIN한 테이블에서 EMP_NO과 EMP_NAME으로 그룹핑해서 2022년의 평균 평가점수를 계산할 수 있다. 96점을 넘기면 GRADE를 S로 출력하고, SAL에 0.2를 곱한 것이 BONUS,90점을 넘기면 G.. 2025. 8. 23.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 언어별 개발자 분류하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/276036 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr GROUP_CONCAT를 활용해야 하는 문제다. SKILLCODES와 DEVELOPERS를 JOIN해서, ID와 EMAIL로 그룹핑한다. 그룹핑 했을 때, 그 그룹의 SKILLCODES.NAME들과 SKILLCODES.CATEGORY들이 각각 문자열로 CONCAT 되어 한 행에 한 개발자의 SKILLCODES.NAME들과 SKILLCODES.CATEGORY가 한번에 보여야 한다. 이를 GROUP_CONCAT를 사용하여 구현할 수 있다. G.. 2025. 8. 22.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 입양 시각 구하기(2) 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 시간대 별 입양이 일어난 횟수를 구하는 문제이다. HOUR라는 Column을 만들어야하는데, ANIMAL_OUTS에다가 만들면 입양이 일어나지 않은 시간은 존재하지 않는다. 그러므로 모든 시간이 존재하는 테이블을 만들어서, HOUR(ANIMAL_OUTS.DATETIME)과 LEFT JOIN한다. HOURS라는 테이블을 다음과 같이 재귀 쿼리로 만들 수 있다.WITH RECURSIVE HOURS AS ( SELECT 0 AS HOUR .. 2025. 8. 21.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 년, 월, 성별 별 상품 구매 회원 수 구하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr USER_INFO와 ONLINE_SALE은 USER_ID라는 공통의 Column을 가지고 있기 때문에, 이를 JOIN하는 데 사용할 수 있다.그냥 JOIN해서 년, 월, 성별을 출력하면, 동일한 년, 월에 구매한 회원이 중복으로 출력된다. 그렇기 때문에 USER_ID에 DISTINCT를 걸어서 중복을 제거한다.서브쿼리는 다음과 같다.SELECT DISTINCT UI.USER_ID, YEAR(SALES_DATE) AS YEAR, MONTH(.. 2025. 8. 18.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 멸종위기의 대장균 찾기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/301651 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 세대를 알기 위해서 재귀 쿼리를 사용해야하는 문제다.WITH RECURSIVE GENERATIONS AS ( SELECT ID, PARENT_ID, 1 AS GENERATION FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT C.ID, C.PARENT_ID, P.GEN.. 2025. 8. 17.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 오랜 기간 보호한 동물(2) 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/59411 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 보호소에 들어온 동물의 정보를 담은 테이블 ANIMAL_INS와 보호소에서 나간 동물의 정보를 담은 테이블 ANIMAL_OUTS가 있다.입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하면 된다. 우선 두 테이블에 공통적으로 있는 것이 ANIMAL_ID다. 이 둘을 JOIN한다.그 다음 DATEDIFF(O.DATETIME, I.DATETIME)을 기준으로 내림차순 정렬하고, 상위 2개만 남기면 된다. 정답 .. 2025. 8. 15.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: FrontEnd 개발자 찾기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/276035 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 어떤 개발자의 SKILL_CODE가 400(이진수로 110010000) 이라면, 이는 SKILLCODES 테이블에서 256(이진수로 100000000), 128(이진수로 10000000), 16(이진수로 10000)에 해당하는 스킬을 가졌다는 것을 의미한다. DEVELOPERS와 SKILLCODES 테이블을 JOIN하는데, SKILL_CODE와 CODE의 & 비트 연산의 결과가 0이 아니면서, CATEGORY가 Front End인 행을 남.. 2025. 8. 14.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 조건에 맞는 사용자와 총 거래금액 조회하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/164668 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr USED_GOODS_BOARD에서 일단 상태가 DONE인 물품만 필터링 한 다음에, WRITER_ID로 그룹핑 해서 TOTAL_SALES를 구한다. 집계 후 TOTAL_SALES가 700000 이상인 결과만 보기 위해서 HAVING절을 사용한다. 서브쿼리는 다음과 같다.SELECT UGB.WRITER_ID AS USER_ID, SUM(UGB.PRICE) AS TOTAL_SALESFROM USED_GOODS_BOARD AS UGBWHERE .. 2025. 8. 13.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 특정 세대의 대장균 찾기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/301650 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 3세대 대장균의 ID를 오름차순으로 출력하는 문제이다. 1세대 대장균으로 취급할 테이블, 2세대 대장균으로 취급할 테이블, 3세대 대장균으로 취급할 테이블 3개를 다음 조건으로 JOIN하면 된다. 1. 1세대 대장균으로 취급할 테이블의 PARENT_ID는 NULL이라는 조건2. 2세대 대장균으로 취급할 테이블의 PARENT_ID와 1세대 대장균으로 취급할 테이블의 ID가 같다는 조건3. 3세대 대장균으로 취급할 테이블의 PARENT_ID와.. 2025. 8. 8.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 취소되지 않은 진료 예약 조회하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/132204 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 환자, 예약, 의사 테이블이 있다.환자와 의사는 다대다 관계에 있고 이를 표현하는 중간테이블이 예약인 것으로 생각할 수 있다. 따라서 세 테이블을 JOIN하고, 2022년 4월 13일에 예약된 것 중, APNT_CNCL_YN이 'N'인 것을 찾아서 출력하면 된다. 정답 쿼리는 다음과 같다.SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, D.MCDP_CD, D.DR_NAME, A.APNT_YMDFROM PATIENT AS.. 2025. 8. 7.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 상품을 구매한 회원 비율 구하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131534 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 일단 2021년에 가입한 회원 중 상품을 구매한 회원수를 먼저 구해야한다. 다음과 같은 쿼리를 일단 작성해볼 수 있다.SELECT YEAR(S.SALES_DATE) AS YEAR, MONTH(S.SALES_DATE) AS MONTH, S.USER_IDFROM USER_INFO AS UJOIN ONLINE_SALE AS SON U.USER_ID = S.USER_IDWHERE YEAR(U.JOINED) = '2021' 그룹핑이 없는 이 쿼리를.. 2025. 8. 6.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 즐겨찾기가 가장 많은 식당 정보 출력하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131123 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 일단 음식 종류 별 즐겨찾기수가 가장 많은 식당의 음식 종류와 즐겨찾기 수를 그룹핑해서 구하는 서브쿼리를 만들어야 한다. 그룹핑 대상이 음식 종류이기 때문이다. 쿼리는 다음과 같다.SELECT FOOD_TYPE, MAX(FAVORITES) AS MAXFAVFROM REST_INFOGROUP BY FOOD_TYPE 이 서브쿼리로 구해진 테이블과 REST_INFO 테이블을 음식 종류와 즐겨찾기 수로 JOIN하면 된다. 문제에서 요구하는 대로 .. 2025. 8. 5.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 대장균의 크기에 따라 분류하기 2 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/301649 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 대장균 개체의 크기를 내림차순으로 정렬하였을 때, 4개의 분위로 나누어서, 1분위는 CRITICAL, 2분위는 HIGH, 3분위는 MEDIUM, 4분위는 LOW라고 분류하여 ID와 함께 출력하면 되는 문제다. 대장균 개체의 크기를 내림차순으로 정렬하였을 때의 기준에서 4개의 분위를 나누어야 하므로,CASE NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC)를 사용하면 된다. 정답 쿼리는 다음과 같다. SELE.. 2025. 8. 4.
[Problem Solving] 프로그래머스 SQL 고득점 Kit: 조건에 맞는 사용자 정보 조회하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/164670 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 출력해야한다. 우선 두 테이블을 Join해서 모든 사용자가 올린 글과 사용자 정보를 알 수 있다.SELECT *FROM USED_GOODS_BOARD AS BJOIN USED_GOODS_USER AS UON B.WRITER_ID = U.USER_ID 여기서 SELECT U.USER_ID를 하고 U.USER_ID로 그룹핑 한 후, HAVING COUNT(*)를 .. 2025. 8. 3.