TIL - 250410_(SQL_datalemur_7개)

오정수·2025년 4월 10일

TIL

목록 보기
56/78

SQL을 요즘 안 다뤄서 감을 잡기 위해 이전에 풀었던 SQL을 빠르게 복습할 것이다.

문제 1 (링크)

코드

WITH a AS (
  SELECT 
    COUNT(user_id) AS tweet_bucket
  FROM tweets
  WHERE EXTRACT(YEAR FROM tweet_date) = 2022
  GROUP BY user_id
  )
SELECT
  tweet_bucket
  , COUNT(tweet_bucket) AS users_num
FROM a
GROUP BY tweet_bucket

비고 : GROUP BY에 대해 까먹었다. 다시 알게 되어 기쁘다.

문제2 (링크)

WITH a AS(
  SELECT
    candidate_id
  FROM candidates
  WHERE skill in ('Python','Tableau','PostgreSQL')
  )
SELECT
  candidate_id
FROM a
GROUP BY candidate_id
HAVING COUNT(candidate_id)=3
ORDER BY candidate_id

SELECT 
  candidate_id
FROM candidates
WHERE skill IN ('Python', 'Tableau', 'PostgreSQL')
GROUP BY candidate_id
HAVING COUNT(DISTINCT skill) = 3
ORDER BY candidate_id;

비고 : 위에 코드로 짰는데 이전에 짠 코드가 훨씬 잘 된 거 같다. 위에 코드는 굳이 WITH 절을 할 필요가 없어 보인다.

문제3 (링크)

SELECT
  page_id
FROM pages 
LEFT JOIN page_likes
USING(page_id)
WHERE user_id IS NULL

문제4 (링크)

SELECT 
  part
  , assembly_step
FROM parts_assembly
WHERE finish_date IS NULL

문제5 (링크)

SELECT
(
  SELECT
    COUNT(device_type)
  FROM viewership
  WHERE device_type = 'laptop'
) laptop_views
,
(
  SELECT
    COUNT(device_type)
  FROM viewership
  WHERE device_type in ('tablet','phone')
) mobile_views

비고 : SELECT만 사용해도 된다는 것을 알았던 문제.

문제6 (링크)

SELECT
  user_id
  , EXTRACT(DAY FROM MAX(post_date) - MIN(post_date)) days_between
FROM posts
WHERE EXTRACT(YEAR FROM post_date) = 2021
GROUP BY user_id
HAVING COUNT(user_id) > 1

비고 : EXTRACT 함수 내에 사칙 연산을 할 수 있고 MAX()와 MIN()도 넣을 수 있는 걸 알게 된 문제.

문제7 (링크)

SELECT
  sender_id
  , COUNT(sender_id) message_count
FROM messages
WHERE 
  EXTRACT(YEAR FROM sent_date) = 2022
  AND EXTRACT(MONTH FROM sent_date) = 8
GROUP BY sender_id
ORDER BY message_count DESC
LIMIT 2
profile
안녕하세요 오정수입니다

0개의 댓글