개발/SQL 42

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

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

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

프로그래머스SQL_조건에 맞는 ■ 사용 문법 GROUP BY, JOIN, LIKE, ROUND ■ 사용 방법먼저 조인을 하여 REVIEW_SCORE을 볼 수 있도록 하나의 테이블로 만든다. 이후 REST_ID로 GROUP을 지어 평균 점수를 SELECT 해준다. 그리고 문제에 '서울' 이라고 되어 있기 때문에, 문자열에 서울이 포함된 것으로 하되 서울시가 주소이므로 '%서울%' 대시 '서울%'을 이용해 문자열을 찾는다.  ■ 코드-- 코드를 입력하세요SELECT A.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(B.REVIEW_SCORE), 2) AS SCOREFROM REST_INFO AS AJOIN REST_REVIEW AS B ON A...

개발/SQL 2024.04.30

프로그래머스SQL_조건에 맞는 개발자 찾기

■ 사용 문법 비트 연산, 서브 쿼리 ■ 사용 방법서브쿼리를 통하여 Python과 C#의 코드를 구해주고, 해당 값을 비트 연산으로 만들어주었다. 즉, Python 이 10000000 이고 C#이 10000000000 OR 연산을 하면 10010000000이다. 이 값으로 SKILL_CODE에 AND 연산을 해주면 0이외의 값을 가지는 것이 둘 중 한가지 값을 포함한다고 보면된다.  ■ 코드SELECT ID, EMAIL, FIRST_NAME, LAST_NAMEFROM DEVELOPERSWHERE (SKILL_CODE & ( SELECT BIT_OR(CODE) FROM SKILLCODES WHERE NAME IN ('Python', 'C#'))) != 0ORDER BY ID;

개발/SQL 2024.04.27

프로그래머스SQL_업그레이드 된 아이템 구하기

■ 사용 문법 서브쿼리  ■ 사용 방법2개의 서브쿼리를 이용하였다. 우선 RARE 타입의 ITEM을 SELECT 해주었고, SELECT된 ITEM들의 정보를 찾기 위해 ITEM_ID를 조건으로 SELECT 해주었다.  ■ 코드SELECT ITEM_ID, ITEM_NAME, RARITYFROM ITEM_INFOWHERE ITEM_ID IN ( SELECT A.ITEM_ID FROM ITEM_TREE AS A WHERE PARENT_ITEM_ID IN ( SELECT ITEM_ID FROM ITEM_INFO AS C WHERE RARITY = 'RARE'))ORDER BY ITEM_ID DESC 또 다른 방법으로 찾은 결과를 이용해 2개의 테이블을 조인..

개발/SQL 2024.04.26