📑 1. 문제설명💡 2. 접근방식WHERE절이랑 HAVING 절 쓰임이 너무너무 헷갈린다. 왜 HAVING을 사용하는가? 이 문제에서는 평균 대여 기간(AVG)을 계산한 후 해당 값이 7 이상인 그룹만 필터링해야 한다.평균을 계산하려면 먼저 CAR_ID 별로 그룹화를 해야한다.이후에 조건을 적용할 수 있는 절이 바로 HAVING이다.즉, WHERE 절로는 그룹화 이후의 집계 결과를 필터링할 수 없기 때문에 반드시 HAVING을 사용해야 한다. 언제 WHERE절을 써야 하고, 언제 HAVING 절을 써야 하는지 정말 헷갈린다.이건 SQL 쿼리문 실행 순서와 관련이 있다.FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BYHAVING은 GROUP BY 이후 실행..
📑 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..