개발 101

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

프로그래머스_달리기 경주

■ 해결 방법callings에 있는 값을 players에 순회해서 찾으려면 50,000 * 1,000,000의 시간복잡도가 소요된다. 따라서 O(n) 이하의 시간 복잡도로 풀 수 있는 방법을 찾아야 한다. 나는 players의 있는 값들을 순위를 매겨주었다. { mumu : 1, soe : 2, poe : 3, kai : 4, mine : 5} 이런식으로 해준 다음 callings에 불린 값과 그 앞의 값의 순서를 바꿔주는 형태로 진행했다. 이 때 주의해야 할 것은 players의 순서만 바꾸어 주는 것이 아닌, 순위도 값이 변경해주어야 하는 것이다.  ■ 코드 function solution(players, callings) { var answer = []; let playersDict =..

개발/알고리즘 2024.05.03

프로그래머스_개인정보 수집 유효기간

■ 해결 방법문자열을 잘 가지고 놀아야 하는 문제이다.  계산된 개인정보 약관과 현재 날짜를 비교를 하면 되는데, 구조화를 잘 해놓기만 하면 쉽게 풀 수 있다. ■ 코드 function solution(today, terms, privacies) { var answer = []; let map = new Map(); for(key in terms){ map.set(terms[key].substr(0, 1),Number(terms[key].split(' ')[1])) } for(key in privacies){ let year = Number(privacies[key].substr(0,4)) let month = Number(privacies..

개발/알고리즘 2024.05.02

프로그래머스SQL_대장균들의 자식의 수 구하기

■ 사용 문법 LEFT JOIN, IFNULL, GROUP BY ■ 사용 방법1. ECOLI_DATA 테이블을 GROUP BY를 해줘 PARENT_ID의 갯수를 구해준다.2. 이렇게 만들어진 테이블을 ECOLI_DATA와 LEFT JOIN을 해준다. LEFT JOIN을 해주는 이유는 모든 ID에 대한 자식의 수를 구해줘 하므로 갯수가 0인 것도 나와야 한다. 기존에 있는 INNER JOIN으로 할 경우 교집합만 출력이 되므로 모든 ID가 있는 ECOLI_DATA의 값이 다 나올 수 있도록 LEFT JOIN을 해준다. 3. 갯수가 NULL 인것은 IFNULL을 통해 0으로 널처리를 해준다.  ■ 코드-- 코드를 작성해주세요SELECT ID, IFNULL(CNT, 0) AS CHILD_COUNTFROM EC..

개발/SQL 2024.05.02