📑 1. 문제설명💡 2. 접근방식FILE_PATH 출력 예시를 보고 '/home/grep/src/' + F.BOARD_ID + '/' + F.FILE_ID + F.FILE_NAME + F.FILE_EXT이렇게 문자열이 결합된 구조라는 걸 알 수 있었다. CONCAT으로 해당 문자열을 모두 결합 해 준다. 처음에는 헷갈려서 + 연산자로 했는데 ,로 결합을 해 줘야 한다. 두 테이블 조인할 때는 BOARD_ID 컬럼을 기준으로 조인 해 준다. WHERE 절에서 서브쿼리를 쓴다. 먼저 USED_GOODS_BOARD를 조회수 컬럼(VIEW) 기준으로 내림차순 해 주고 그 중 가장 높은 것만 가져와야 하니까 LIMIT1 을 걸어준다. 마지막으로 FILE_ID로 내림차순 정렬하면 끝~! 쉽다⭐ 3. 정답코드..
1. 문제 설명2. 접근방식ECOLI_DATA는 부모-자식간의 계층 관계를 이루고 있기 때문에 각 세대별로 자식이 없는 개체의 수를 출력하려면 재귀 CTE를 사용해서 대장균의 세대generation)를 계산해 주어야 한다. WITH RECURSIVE 블록을 먼저 지정 해 주고, 블록 바깥에서 세대별로 자식이 없는 개체수를 조회하는 쿼리를 짜 주면 된다. WITH RECURSIVE 블록은 또 두 부분으로 나뉘는데, 먼저, PARENT_ID IS NULL인 조건으로 데이터를 조회해서 1세대(AS GENERATION)를 규정 해 준다. 두 번째로 할 일은, 이 1세대 컬럼을 기준으로 +1을 해서 계층 구조를 조회 하는 것이다. 즉, 부모 개체로부터 자식의 세대 수를 계산 해 주는 것이다. Generation ..
어려워서 미루다가 못 푼 문제가 2개 있었다. Lv4 문제 1개랑 Lv5 문제 1개이다. 난이도 최상인 만큼, 문제 읽기도 전에 풀기가 두려운 마음이 있었다. 이 문제는 왠지 오랫 동안 노트북 앞에 앉아서 머리 많이 쓰고 고민해 봐야 될 것 같아서 하기싫었다. MySQL에서는 START WITH CONNECT BY가 안된다는 거 알고부터는 또 새로운거 배우기 싫어서 미뤘는데 오늘 얼른 끝내버리고 자야지1. 문제설명2. 접근방식처음에는 어려워 보여서 문제를 읽고 뭘 구해야 하는지 생각의 흐름을 한글로 받아 적어 봤다. PARENT_ID가 NULL이면 1세대이다. PARENT_ID가 NULL인 ID를 부모로 가지는 행이 2세대 이다. PARENT_ID가 NULL인 ID를 부모로 가지는 행의 ID를 부모로 가..
1. 문제 설명 2. 접근 방법문제를 보고 든 생각은 `연관 컬럼이 없을 때는 테이블을 어떻게 조인하는가?` -> 그래서 카테시안 곱이 떠올랐다.모든 조합을 생성하는 경우를 카테시안 곱(Cartesian Product)이라고 하는데 CROSS JOIN 해 주는 것이다.일단 여기까지만 작성 하고 쿼리를 실행시켜 보기로 했다. 테이블이 옆으로 붙었다. 여기서 날짜별로 GROUP BY 해 보고 뭔가 해 보려고 했는데 중간에 기가 막힌 생각이 났다.테이블을 옆이 아니라 아래로 붙이면 되겠다. 그럼 UNION ALL을 써 보는게 어떨까?그래서 아래로 데이터를 붙이는게 좋겠다고 생각했다.그리고 중복값을 없애면 안되기 때문에 UNION이 아니라 UNION ALL... 설마...!! SELECT SALES_DATE..
난이도 3이라 어려울 줄 알았는데 너무 쉬워서 그냥 코드만 포스팅합니다. 대장균의 크기에 따라 분류하기 1 정답코드SELECT ID, SIZEFROM ( SELECT ID, CASE WHEN SIZE_OF_COLONY > 1000 THEN 'HIGH' WHEN SIZE_OF_COLONY 대장균의 크기에 따라 분류하기 2 문제대장균 개체의 크기를 내림차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름..
1. 문제설명 2. 접근방식이렇게 까지 오래 붙잡고 있을 문제가 아닌데 오늘은 하기 싫어서 ㅋㅋㅋ...게으름 좀 피워봤다. 처음에는 ECOLI_DATA 테이블 내에서 PARENT_ID(부모)가 있는 데이터들의 ID값을 카운트 해 주면 되는거다 라고 생각 해서 틀렸다. 결과창을 보니 자식이 있는 부모들만 출력이 되고 자식이 없는 부모들의 ID값은 조회가 되지 않았기 때문이다. 그래서 LEFT JOIN을 해 주어야 겠다고 생각했다.코드를 이렇게 고쳤는데 이렇게 했는데도 결과는 같다.이렇게 고치면서 부모 테이블이 ID 값을 ID로 SELECT하고, 자식 테이블의 PARENT_ID를 카운팅 해 주었다. 틀린 이유는 WHERE 절 때문이었다.자식이 없는 부모도 카운팅을 해야 하기 때문에WHERE E.PARENT..
[목차]1. 경기도에 위치한 식품창고 목록 출력하기2. 이름이 없는 동물의 아이디 / 이름이 있는 동물의 아이디3. NULL 처리하기4. 나이 정보가 없는 회원 수 구하기5. ROOT 아이템 구하기6. 잡은 물고기의 평균 길이 구하기7. ⭐업그레이드 할 수 없는 아이템 구하기1. 경기도에 위치한 식품창고 목록 출력하기SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, (IFNULL(FREEZER_YN,'N')) AS FREEZER_YNFROM FOOD_WAREHOUSEWHERE ADDRESS LIKE '경기도%'ORDER BY WAREHOUSE_ID;2. 이름이 없는 동물의 아이디 & 이름이 있는 동물의 아이디SELECT ANIMAL_IDFROM ANIMAL_INSWHERE..
1. 문제 설명문제분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.2. 접근방법 가장 큰 대장균의 크기를 구해줘야 하므로 MAX(SIZE_OF_COLONY)를 해 줘야 할 것 같고 연도별로 구해야 하니까 윈도우 함수써 줘서 연도로 파티셔닝 해 주어야 한다. 일단 이 작업을 먼저 한 후에 해당 결과를 가지고 다시 데이터를 추출 해 주고 ORDER BY 정렬을 해 주어야 겠다고 생각했다. 먼저, ..