SQL 25

프로그래머스SQL_자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

■ 사용 문법 GROUP BY ■ 사용 방법 1. start_date가 2016-10-16보다 작거나 같고(AND) end_date이 2016-10-16보다 같거나 큰 것을 필터링 해준다. 2. CAR_ID로 GROUP BY 한다. 3. 위 쿼리를 서브쿼리로 하여 SELECT 문에 넣어준다. 이 때 CASE 문을 사용하여 위 쿼리에 해당하는 것들은 '대여중' 그 이외의 것들은 '대여 가능'으로 하여 AVAILABLITY 칼럼을 만든다. 4. CAR_ID로 GROUP BY 한다.  ■ 코드 -- 코드를 입력하세요SELECT CAR_ID,( CASE WHEN CAR_ID IN (SELECT CAR_IDFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYWHERE START_DATE = DAT..

개발/SQL 2024.05.16

프로그래머스SQL_카테고리 별 도서 판매량 집계하기

■ 사용 문법 JOIN, GROUP BY, SUM ■ 사용 방법1. BOOK_ID를 기준으로 BOOK_SALES 과 BOOK을 Join 해준다.2. 2022년 1월로 필터로 걸러준다. 3. CATERGORY를 GROUP BY로 나누고, SALES를 SUM 해준다.  ■ 코드-- 코드를 입력하세요SELECT B.CATEGORY, SUM(SALES)FROM BOOK_SALES as AJOIN BOOK as BON A.BOOK_ID = B.BOOK_IDWHERE A.SALES_DATE BETWEEN DATE('2022-01-01') AND DATE('2022-01-31')GROUP BY B.CATEGORYORDER BY B.CATEGORY

개발/SQL 2024.05.13

프로그래머스SQL_즐겨찾기가 가장 많은 식당 정보 출력하기

■ 사용 문법 MAX, GROUP BY, JOIN ■ 사용 방법1. GROUP BY를 이용해 FOOD_TYPE 별 최대 FAVOTRITE 수를 구한다. 이 때, MAX를 사용하는데, 나머지 REST_ID와, REST_NAME의 값을 제대로 가져올 수 없다.2. 최대값과 FOOD_TYPE으로 REST_INFO와 조인해준다.  ■ 코드SELECT A.FOOD_TYPE, A.REST_ID, A.REST_NAME, A.FAVORITESFROM REST_INFO AS AJOIN ( SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE ) AS BON A.FAVORITES = B.FAVORITES AND ..

개발/SQL 2024.05.10

프로그래머스SQL_대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

■ 사용 문법 GROUP BY, HAVING ■ 사용 방법1. 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차 ID 추출2. 추출한 자동차 ID로 2022년 8월부터 2022년 10월까지 월별 대여 횟수 계산 ■ 코드SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(CAR_ID) AS RECORDSFROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS AWHERE START_DATE >= DATE('2022-08-01') AND START_DATE = DATE('2022-08-01') AND START_DATE = 5 ORDER BY CAR_ID)GROUP BY CAR_ID, MONTH(START_DATE)ORD..

개발/SQL 2024.05.09

프로그래머스SQL_서울에 위치한 식당 목록 출력하기

■ 사용 문법 WITH RECURSIVE ■ 사용 방법WITH RECURSIVE를 이용해 세대 별로 분류해준다. 이후 PARENT_ID에 없는 ID를 분류해주고, GROUP BY로 세대 별로 나누어 줘서 갯수를 구하면 된다.  ■ 코드-- 코드를 작성해주세요WITH RECURSIVE GEN_DATA AS ( SELECT ID, PARENT_ID, 1 AS GEN FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT A.ID, A.PARENT_ID, (GEN + 1) AS GEN FROM ECOLI_DATA AS A INNER JOIN GEN_DATA g ON A.PAREN..

개발/SQL 2024.05.07

프로그래머스SQL_부모의 형질을 모두 가지는 대장균 찾기

■ 사용 문법 비트 연산자(AND, OR) ■ 사용 방법비트 연산을 이용해 부모의 형질을 모두 보유한 대장균 ID를 구하는 문제이다. 부모 대장균의 형질과 자식 대장균의 형질의 OR 연산을 통해 자식 대장균 값이 나오면 출력하면 된다.  ■ 코드FROM(SELECT ID, PARENT_ID, A.GENOTYPE, (SELECT B.GENOTYPE FROM ECOLI_DATA AS B WHERE A.PARENT_ID = B.ID ) AS PARENT_GENOTYPE, (SELECT B.GENOTYPE | A.GENOTYPE FROM ECOLI_DATA AS B WHERE A.PARENT_ID = B.ID ) AS CALCUL_A,FROM ECOLI_DATA AS A ..

개발/SQL 2024.05.06

프로그래머스SQL_특정 세대의 대장균 찾기

■ 사용 문법 서브 쿼리, IS NULL ■ 사용 방법서브쿼리를 이용해 자식 ID를 찾아 3세대 까지 이동하였다. 다만, 내 방식에는 반복이 계속되었는데 3세대가 아니라 10세대를 구하라고 했다면 풀기 힘들 것이다. 찾아보니 WITH RECURSIVE 를 사용하여 재귀 문제를 풀 수 있었다.   ■ 코드-- 코드를 작성해주세요SELECT C.IDFROM ECOLI_DATA AS C, ( SELECT A.ID FROM ECOLI_DATA AS A, (SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL) AS B WHERE A.PARENT_ID = B.ID ) AS DWHERE C.PA..

개발/SQL 2024.05.05

프로그래머스SQL_대장균의 크기에 따라 분류하기 2

■ 사용 문법 RANK OVER혹은 NTILE  ■ 사용 방법우선 SIZE_OF_COLONY를 RANK함수로 순위를 나눠주고 이후 백분율을 구해주었다. 그리고 기준에 따라 랭크를 입력하게 해주었다. 내가 푼 방식은 굉장히 복잡하고 정신없었는데, 이것을 쉽게 해준 것이 NTILE 함수다. NTILE은 파티션을 설정할 수 있어 파티션 갯수에 따라 순위를 나누어준다. ■ 코드SELECT C.ID, (CASE WHEN C.PERCENTAGE 25 THEN 'HIGH' WHEN C.PERCENTAGE 50 THEN 'MEDIUM' ELSE 'LOW'END) AS 'COLONY_NAME'FROM ( SELECT A.ID, B.COLONY_RANK, ..

개발/SQL 2024.05.04