목록SQL/Programmers (5)
Hi
https://school.programmers.co.kr/learn/courses/30/lessons/301650📌 문제 요약ECOLI_DATA 테이블에서 세대 정보를 파악하여 3세대에 해당하는 ID만 추출해야 하는 문제이다.ID는 대장균 개체PARENT_ID는 부모 개체최초 대장균 개체의 PARENT_ID는 NULL💡 문제 접근문제를 딱 보자마자 SQLD 공부했을 때 배웠던 CONNECT BY절을 사용해서 LEVEL을 확인해야겠다고 생각했다.이 방법은 Oracle에서 계층구조를 탐색할 때 사용하는데,해당 문제는 MySQL로만 풀이 할 수 있어서 CONNECT BY를 사용할 수 없었다.대신 지난 번에 공부한 재귀 CTE를 사용하여 MySQL로 풀이하였다.✅ 문제 풀이WITH RECURSIVE LEV..
https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌 문제 요약시간 대별로 입양이 몇 건이 발생했는지 조회해야 한다.단, 입양 기록(DATETIME)이 존재하지 않는 시간대도 0건으로 출력되도록 해야 한다.출력 조건:시간대(HOUR) 0~23시까지 모두 출력각 시간대별 입양 건수 출력 (단, 없는 시간대도 0으로 출력)시간(HOUR) 오름차순 정렬 💡 문제 접근처음엔 단순히 시간으로 그룹핑해서 건수를 세면 된다고 생각했다.SELECT HOUR(DATETIME), COUNT(*)FROM A..
https://school.programmers.co.kr/learn/courses/30/lessons/131117 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📍 문제 접근5월에 생산된 상품의 총판매량을 구해야 했는데 단순히 JOIN과 GROUP BY로 풀면 되겠다고 생각했다.총 판매량을 구하기 위해서는 FOOD_ORDER의 AMOUNT와 FOOD_PRODUCT의 PRICE를 곱해야 했다.그룹으로 묶은 다음 판매량을 구하려고 하니 복잡해질 것이라고 생각해서 with를 이용해서 풀었다(성공 코드2)근데 막상 풀이 해보니 굳이 필요 없을 것 같아 다시 풀었다(성공 코드1) 📍 성공 코드 1SELE..
https://school.programmers.co.kr/learn/courses/30/lessons/301649 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 처음에는 CASE WHEN 구문을 사용하여 세균 군집의 크기 비율을 계산하려고 했다. 처음 작성한 쿼리는 다음과 같았다.📍 실패 코드 1SELECT ID, CASE WHEN size_of_colony / (SELECT SUM(size_of_colony) FROM ecoli_data) * 100 코드를 보면 알겠지만 굉장히 비효율적이었다. 그래서 WITH 구문을 사용해 비율을 먼저 구했다.📍 실패 코드 2WITH..
https://school.programmers.co.kr/learn/courses/30/lessons/157340 처음에는 CASE WHEN 문을 활용하여 해결하려고 했다. 특정 날짜('2022-10-16')가 START_DATE와 END_DATE 사이에 있는지 확인하고, 그에 따라 '대여중' 또는 '대여 가능'을 출력하는 방식이다.그러나 CAR_ID가 같은 경우가 많아 단순한 CASE WHEN만으로는 해결하기 어려웠다. 여러 개의 대여 기록이 존재하는 경우 특정 날짜에 하나라도 대여중이면 '대여중'으로 표시해야 하는데, 단순 GROUP BY로는 이를 해결할 수 없었다. 해결 방법을 고민하던 중 EXISTS를 활용하면 문제를 깔끔하게 해결할 수 있다는 것을 알게 되었다. EXISTS는 서브쿼리의 결과가..