본문 바로가기

SQL/코딩테스트42

[leetcode / MySQL] 1158. Market Analysis I 문제 💡 Write a solution to find for each user, the join date and the number of orders they made as a buyer in 2019. Return the result table in any order. 테이블 형태 풀이 SELECT user_id AS buyer_id, join_date, SUM(CASE WHEN YEAR(order_date)=2019 THEN 1 ELSE 0 END) AS orders_in_2019 FROM Users AS u LEFT JOIN Orders AS o ON u.user_id=o.buyer_id GROUP BY user_id 해설 각 유저별 가입 일자와 2019년에 buyer로서 주문한 order 데이터의.. 2024. 2. 27.
[leetcode / MySQL] 1070. Product Sales Analysis III 문제 💡 Write a solution to select the product id, year, quantity, and price for the first year of every product sold. Return the resulting table in any order. 테이블 형태 풀이 SELECT product_id, year AS first_year, quantity, price FROM Sales WHERE (product_id, year) IN (SELECT product_id, MIN(year) AS year FROM Sales GROUP BY product_id) 해설 SELECT product_id, year AS first_year, quantity, price FROM Sale.. 2024. 2. 27.
[leetcode / MySQL] 626. Exchange Seats 문제 💡 Write a solution to swap the seat id of every two consecutive students. If the number of students is odd, the id of the last student is not swapped. Return the result table ordered by id in ascending order. 테이블 형태 풀이 SELECT id , CASE WHEN id=(SELECT COUNT(*) FROM Seat) AND id%2=1 THEN student WHEN id%2=1 THEN LEAD(student, 1) OVER (ORDER BY id) WHEN id%2=0 THEN LAG(student, 1) OVER(ORDER BY.. 2024. 2. 22.
[leetcode / MySQL] 585. Investments in 2016 문제 💡 Write a solution to report the sum of all total investment values in 2016 tiv_2016, for all policyholders who: have the same tiv_2015 value as one or more other policyholders, and are not located in the same city as any other policyholder (i.e., the (lat, lon) attribute pairs must be unique). Round tiv_2016 to two decimal places. 테이블 형태 풀이 SELECT ROUND(SUM(tiv_2016),2) AS tiv_2016 FROM Insu.. 2024. 2. 22.
[leetcode / MySQL] 176. Second Highest Salary 문제 Write a solution to find the second highest salary from the Employee table. If there is no second highest salary, return null (return None in Pandas). 테이블 형태 풀이 SELECT MAX(salary) AS SecondHighestSalary FROM EMPLOYEE WHERE salary (SELECT MAX(salary) FROM Employee) 해설 원래 윈도우 함수 중 집계함수(DENSE_RANK 등)을 사용해서 풀이하려고 했으나, 출력하고자 하는 값이 존재하지 않을 때 NULL을 반환하는 방법을 찾지 못해 다른 사람(bhumileetcode)의 풀이를 참고하였다. OFF.. 2024. 2. 19.
[프로그래머스 / MySQL] 진료과별 총 예약 횟수 출력하기 문제 💡 APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요. 테이블 형태 풀이 SELECT MCDP_CD AS 진료과코드, COUNT(PT_NO) AS 5월예약건수 FROM APPOINTMENT WHERE YEAR(APNT_YMD) = 2022 AND MONTH(APNT_YMD) = 05 GROUP BY MCDP_CD ORDER BY 5월예약건수, 진료과코드 해설 FROM APPOINTMENT WHERE YEAR(APNT_YMD) = 2022 .. 2024. 2. 2.
[프로그래머스 / MySQL] 성분으로 구분한 아이스크림 총 주문량 문제 💡 상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요. 테이블 형태 풀이 SELECT I.INGREDIENT_TYPE, SUM(F.TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF AS F JOIN ICECREAM_INFO AS I ON F.FLAVOR = I.FLAVOR GROUP BY I.INGREDIENT_TYPE ORDER BY TOTAL_ORDER 해설 FROM FIRST_HALF AS F JOIN ICECREAM_INFO AS I ON F.FLAVOR = I.FLAVOR 성분타입 별 아이스크림 총 주문.. 2024. 2. 2.
[프로그래머스 / MySQL] 모든 레코드 조회하기 문제 💡 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다. 테이블 형태 풀이 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID 해설 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID 전체 컬럼의 데이터를 출력하므로 SELECT문에 *(asterisk, 아스타)를 사용한다 ANIMAL_ID순으로 오름차순 정렬한다 *(asterisk, 아스타)의 다양한 사용 1. 테이블의 모든 컬럼 선택 SELECT * FROM t1 INNER JOIN t2 ...​ 2. 이름이 지정된 테이블의 모든 컬럼 선택 SELECT t1.*, t2.* FROM t1 INNER J.. 2024. 2. 2.
[프로그래머스 / MySQL] 평균 일일 대여 요금 구하기 문제 💡 CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요. 테이블 형태 풀이 SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE LIKE 'SUV' 해설 WHERE CAR_TYPE LIKE 'SUV' WHERE문에 LIKE를 활용해 자동차 종류가 SUV인 자동차를 필터링한다. CAR_TYPE='SUV'도 가능한데 당시 LIKE를 안 지 얼마 안돼 사용해보고 싶어 LIKE를 썼다 SELECT ROU.. 2024. 2. 2.