SolveSQL/난이도 2

[SolveSQL/난이도 2] 데이터리안 SQL 데이터 분석 캠프 실전반(MySQL)

보단잉 2024. 12. 27. 00:38

레스토랑의 대목

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