Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- join
- Bert
- 머신러닝
- 가상환경
- 코딩테스트
- ChatGPT
- dfs
- SQL 첫걸음
- LLM
- SQL
- 그래프
- 논문리뷰
- 분산
- 연구
- 자연어처리
- 백준
- gpt1
- MySQL
- ABAE
- Aspect
- NLP
- transformer
- 파이썬
- 알고리즘
- outer join
- paper review
- leetcode
- 프로그래머스
- GPT
- deepseek
Archives
- Today
- Total
huginn muninn
[Leetcode] SQL Medium 1174, 550, 1070, 1045 본문
1174. Immediate Food Delivery II
https://leetcode.com/problems/immediate-food-delivery-ii/description/
# Write your MySQL query statement below
-- 고객이 원하는 배송 날짜가 주문 날짜와 동일하면 즉시 주문이 호출된다.
-- 전체 고객의 첫번째 주문에서 즉시 주문의 비율을 소수점 이하 2자리까지 반올림해 구하는 솔루션을 작성.
-- 첫번째 주문만
WITH FIRST AS
(SELECT
CUSTOMER_ID,
MIN(ORDER_DATE) AS OD,
MIN(CUSTOMER_PREF_DELIVERY_DATE) AS DELIVERY
FROM DELIVERY
GROUP BY CUSTOMER_ID)
SELECT
ROUND(SUM(CASE WHEN OD=DELIVERY THEN 1 ELSE 0 END)/COUNT(*)*100.00,2) AS immediate_percentage
FROM FIRST
고객 아이디 기준으로 첫번째 주문만 찾은 후 비율 계산.
550. Game Play Analysis IV
https://leetcode.com/problems/game-play-analysis-iv/description/
# Write your MySQL query statement below
-- 처음 로그인 한 다음날 다시 로그인한 플레이어의 비율을 소수점 2자리로
-- 첫번째 로그인 날짜부터 최소. 2일 연속으로 로그인한 플레이어 수를 계산한다음 전체 플레이 수로 나누어야 함
WITH NEXT AS(
SELECT
PLAYER_ID,
DATEDIFF(EVENT_DATE,MIN(EVENT_DATE) OVER(PARTITION BY PLAYER_ID))=1 AS CONNECT
FROM ACTIVITY
)
SELECT
ROUND(SUM(CONNECT)/COUNT(DISTINCT PLAYER_ID),2) AS FRACTION
FROM NEXT
처음 로그인 한 날 다음날 다시 로그인한 플레이어의 비율을 구하는 것.
플레이어 아이디 기준으로 최소 날짜와 차이가 1일 차이나는 날을 구해놓고, 비율을 구하면 된다.
여기서 윈도우 함수를 적극적으로 활용해서 쉽게 구할 수 있다.
1070. Product Sales Analysis III
# Write your MySQL query statement below
-- 판매된 모든 제품의 첫 해에 대한 제품 id, 연도, 수량 및 가격을 선택하는 솔루션
SELECT
S.PRODUCT_ID AS product_id,
S.YEAR AS first_year,
S.QUANTITY as quantity,
S.PRICE as price
FROM SALES AS S
INNER JOIN
(SELECT
PRODUCT_ID,
MIN(YEAR) AS YEAR
FROM SALES
GROUP BY PRODUCT_ID) AS M
ON M.PRODUCT_ID=S.PRODUCT_ID
AND M.YEAR=S.YEAR
가장 처음 판매된 제품들의 정보를 출력하는 솔루션,
제품 아이디 기준으로 최소 년도로 group by 후 sales 데이터와 조인했다. 조인할때는 제품아이디와 년도로 inner join 하여 관련된 데이터만 가져올 수 있게끔 했다.
1045. Customers Who Bought All Products
https://leetcode.com/problems/customers-who-bought-all-products/description/
# Write your MySQL query statement below
-- 모든 제품을 구매한 고객의 아이디를 출력
SELECT
CUSTOMER_ID AS customer_id
FROM CUSTOMER
GROUP BY CUSTOMER_ID
HAVING COUNT(DISTINCT PRODUCT_KEY)
= (SELECT COUNT(*) FROM PRODUCT)
비교적 쉬웠던 문제, 제품 테이블(product)에서 전체 행의 개수를 센 다음 고객 테이블(customer)에서 고객 아이디 기준으로 그룹바이한 후 구매한 제품수를 셌을 때 전체 제품 수와 같으면 된다.
'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 노선별 평균 역 사이 거리 조회하기, 정렬 시 주의할 점 (2) | 2024.07.16 |
|---|---|
| [leetcode] 626. Exchange Seats (0) | 2024.06.27 |
| [leetcode] 185. Department Top Three Salaries SQL (0) | 2024.06.21 |
| [프로그래머스] 보호소에서 중성화한 동물 SQL (0) | 2024.06.21 |
| [프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기 SQL (0) | 2024.06.21 |