전처리/SQL(30)
-
SQL: 특정 컬럼에 필터링 된 조건이 필요할 때
01 첫 번째 문제문제 URL: Queries Quality and Percentage tip. 전체 결괏값을 나타내는 서브쿼리를 쓰면 안돼, IF문으로 query_name마다의 다른 결괏값을 출력할 수 있어야 한다.SELECT query_name, ROUND((SUM(rating/position))/COUNT(query_name),2) AS quality, ROUND((COUNT(IF(rating다음과 같은 output처럼 Dog과 Cat 각각의 결괏값이 필요하면 IF문을 사용하라. 02 두 번째 문제문제 URL: Monthly Transactions I tip. 위에서 언급한 내용은 다음 연습 문제에서 확실하게 적용해볼 수 있었다.SELECT DATE_FORMAT(trans_da..
2024.10.14 -
SQL: COALESCE 사용예시, NULLIF과 IFNULL의 차이점
01 COALESCESELECT COALESCE(NULL, NULL, 'Hello', 'World') AS result;-- 결과: 'Hello'1. COALESCE 함수는 인자로 받은 여러 값들 중에서 첫 번째로 NULL이 아닌 값을 반환한다.2. 여러 개의 인자를 받을 수 있다. 02 NULLIF, IFNULLSELECT NULLIF(10, 10) AS result1, NULLIF(10, 20) AS result2;-- 결과: result1은 NULL, result2는 101. NULLIF 함수는 두 인자가 같으면 NULL을 반환하고, 그렇지 않으면 첫 번째 인자를 반환한다.2. 주로 특정 조건에서 값을 NULL로 만들고 싶을 때 사용한다. SELECT IFNULL(NULL, 'Default Valu..
2024.09.30 -
SQL: COUNT()와 SUM()의 작동 방식을 이해한다.
01 문제: COUNT()와 SUM() 작동 방식의 차이를 이해한다.문제 URL: Confirmation Rate ▶ 작성 코드SELECT SI.user_id -- INFULL 없으면 NULL 떠서 추가 -- , IFNULL(ROUND(SUM(CO.action = 'confirmed') / COUNT(CO.action),2),0) AS confirmation_rateFROM Signups AS SILEFT JOIN Confirmations AS CO ON SI.user_id = CO.user_id -- 매칭되지 않으면 NULL --GROUP BY SI.user_id▶ 참고 코드SELECT s.user_id, ROUND( CASE -- NULL을 0으로 ..
2024.09.22 -
SQL: DATEDIFF, SUBDATE 활용 방법의 차이 (feat. join문제)
01 날짜차: DATEDIFF, SUBDATE의 이용법 알기문제 URL: Rising Temperature - LeetCode SELECT W1.idFROM Weather AS W1WHERE W1.temperature > ( SELECT W2.temperature FROM Weather AS W2 WHERE DATEDIFF(W1.recordDate, W2.recordDate)=1);= 다음 코드는 join이지만 조인 조건(on)을 주지 않았다.SELECT w1.idFROM Weather AS W1JOIN Weather AS W2WHERE DATEDIFF(W1.recordDate, W2.recordDate) = 1AND W1.temperature > W2.temperature;=SELECT..
2024.09.12 -
SQL: SELF JOIN 활용하는 문제 풀이 (output보며 이해)
01 문제 URL Managers with at Least 5 Direct Reports - LeetCode 02 작성 코드SELECT E1.NAMEFROM EMPLOYEE AS E1JOIN EMPLOYEE AS E2 ON E1.ID = E2.MANAGERIDGROUP BY E2.MANAGERIDHAVING COUNT(*) >= 5; 03 인사이트해당 테이블에서 하위 직원이 5명 이상 존재하는 관리자의 이름을 output 하는 문제이다. 자기 자신을 join 하여 간단하게 해결할 수 있다. 기본적인 형태를 확인하기 위해 아래 코드를 실행하면 다음과 같은 결과가 나온다.SELECT E1.*, E2.*FROM EMPLOYEE E1JOIN EMPLOYEE E2 ON E1.ID = E2.managerId컬럼..
2024.09.12 -
SQL: CROSS JOIN과 LEFT JOIN 동시에 활용하기
01 문제 URLStudents and Examinations - LeetCode 02 작성 코드SELECT ST.student_id , ST.student_name , SU.subject_name , COUNT(EX.subject_name) AS attended_examsFROM Students AS STCROSS JOIN Subjects AS SULEFT JOIN Examinations AS EXON ST.student_id = EX.student_idAND SU.subject_name = EX.subject_nameGROUP BY ST.student_id , ST.student_name , SU.subject_nameORDER BY S..
2024.09.05 -
SQL: DISTINCT와 GROUP BY
정답쿼리SELECT YEAR(SALES_DATE) AS YEAR, MONTH(sales_date) AS MONTH, COUNT(DISTINCT SAL.USER_ID) AS PURCHASED_USERS, ROUND((COUNT(DISTINCT SAL.USER_ID)) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021),1) AS PUCHASED_RATIOFROM USER_INFO AS INFRIGHT JOIN ONLINE_SALE AS SALON INF.USER_ID = SAL.USER_IDWHERE YEAR(JOINED) = 2021GROUP BY YEAR, MONTHORDER BY YEAR, MONTH 1. 하나의 값을 가..
2024.07.11 -
SQL: 특정기간 동안 대여할 자동차들의 한 달 대여비용
01 최종 코드# CTE: 세단과 SUV 할인 비율WITH RATE AS (SELECT car_type, discount_rate FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE (CAR_TYPE = '세단' OR CAR_TYPE = 'SUV') AND (duration_type = '30일 이상'))# 메인 쿼리: 타입, 대여기간, 할인적용가SELECT CAR.CAR_ID, CAR.car_type, FLOOR(CAR.DAILY_FEE*30*((100-DISCOUNT_RATE)*0.01)) AS FEEFROM CAR_RENTAL_COMPANY_CAR AS CARJOIN RATE ON CAR.car_type..
2024.07.03 -
조건에 부합하는 중고거래 댓글 조회하기
01 문제 발생SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS, DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') CREATED_DATEFROM USED_GOODS_BOARD A, USED_GOODS_REPLY BWHERE A.BOARD_ID = B.BOARD_IDAND DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'ORDER BY B.CREATED_DATE, A.TITLE이거 4월에 풀다만 문제인데, 틀린 원인을 찾아냈다. 댓글 날짜를 '2022년 10월' 조건으로 제한하는 게 아닌 게시글의 작성 날짜의 조건을 '2022년 10월'로 제한해야만 했다. 1. 일단 메인쿼리에 B...
2024.06.25 -
알쿼리즘 스터디: 온/오프라인 판매 데이터 통합하기
01 문제 해결SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNTFROM ONLINE_SALEUNION ALLSELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNTFROM OFFLINE_SALEWHERE SALES_DATE LIKE '2022-03%'ORDER BY SALES_DATE, PRODUCT_ID, USER_ID- 틀린 이유: WHERE 절은 각각 작용하기 때문에 2쿼리에만 쓰면 제대로 필터링 되지 않는다.- 해결 방법: 제 1쿼리와 제 2쿼리 모두 WHERE 절을 사용해서 LIKE에 ..
2024.06.21