레스토랑의 대목
SELECT A.total_bill, A.tip, A.sex, A.smoker, A.day, A.time, A.size FROM tips AS A JOIN (
SELECT day, SUM(total_bill) AS `sales` FROM tips
GROUP BY day
HAVING `sales` >= 1500
) AS B ON A.day = B.day
레스토랑의 요일별 VIP
SELECT A.total_bill, A.tip, A.sex, A.smoker, A.day, A.time, A.size FROM tips AS A JOIN (
SELECT MAX(total_bill) as `max`, day FROM tips
GROUP BY day
) AS B ON (A.day = B.day) AND (A.total_bill = B.`max`)
다음날도 서울숲의 미세먼지 농도는 나쁨 😢
WITH()로 테이블을 새로 만들고 해당 테이블에서 데이터를 가져온다.
MySQL에서는 DATE_ADD(measured_at, INTERVAL 1 DAY)로 다음 날짜를 구할 수 있으나, SolveSQL은 SQLite만 지원하고, SQLite에서는 DATE(measured_at, '1 day')로 다음 날짜를 구할 수 있다고 한다.
LEAD() OVER()로 날짜를 기준으로 정렬된 데이터에서 현재 행의 다음 행의 pm10을 next_pm10으로써 가져온다.
WITH(), LEAD() OVER(), DATE() 등 진짜 처음 보는 것들이다.
WITH A AS(
SELECT measured_at AS `today`, DATE(measured_at, '1 day') as `next_day`, pm10, LEAD(pm10, 1) OVER(ORDER BY measured_at) AS `next_pm10`
FROM measurements
)
SELECT A.today, A.next_day, A.pm10, A.next_pm10 FROM A
WHERE A.pm10 < A.next_pm10
'SolveSQL > 난이도 2' 카테고리의 다른 글
[SolveSQL/난이도 2] Advent of SQL 2024(MySQL, SQLite) (1) | 2024.12.28 |
---|