241019_TIL

J Lee·2024년 10월 19일

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 문제풀이 복습


Leetcode

문제 링크

SELECT p.name,
       sum(ifnull(rest, 0))     AS "rest",
       sum(ifnull(paid, 0))     AS "paid",
       sum(ifnull(canceled, 0)) AS "canceled",
       sum(ifnull(refunded, 0)) AS "refunded"
FROM   Product p
       LEFT JOIN Invoice i
              ON p.product_id = i.product_id
GROUP  BY p.product_id
ORDER  BY 1 ASC;

문제 링크
문자열을 제어하는 SQL 함수 중
char_length를 묻는 문제.

char_length를 쓰면 띄어쓰기를 포함한
문자열의 길이를 계산해 준다.

SELECT tweet_id
FROM   Tweets
WHERE  char_length(content) > 15;

문제 링크
count와 count distinct

SELECT date_id,
       make_name,
       count(DISTINCT lead_id)    AS "unique_leads",
       count(DISTINCT partner_id) AS "unique_partners"
FROM   DailySales
GROUP  BY 1,
          2;

프로그래머스

문제 링크

SELECT count(id)   AS "FISH_COUNT",
       month(time) AS "MONTH"
FROM   FISH_INFO
GROUP  BY 2
ORDER  BY 2;

문제 링크
ifnull과 avg, round를 한꺼번에 쓰는 문제.
어려울 건 없다.

avg가 쓰이긴 했지만
행별로 각각이 아닌 '하나의 값'을 구하는 문제이므로
group by도 쓸 필요 없음.

SELECT round(avg(ifnull(length, 10)), 2) AS "AVERAGE_LENGTH"
FROM   FISH_INFO;

문제 링크
이렇게 쓰나 저렇게 쓰나 결과는 같다.

SELECT sum(CASE
             WHEN length IS NULL THEN 1
           end) AS "FISH_COUNT"
FROM   FISH_INFO;
SELECT count(*) AS "FISH_COUNT"
FROM   FISH_INFO
WHERE  length IS NULL;

문제 링크
간단한 join과 집계함수 문제.

SELECT count(*) AS "FISH_COUNT",
       fish_name
FROM   FISH_INFO f
       JOIN FISH_NAME_INFO fn
         ON f.fish_type = fn.fish_type
GROUP  BY 2
ORDER  BY 1 DESC;

문제 링크
order by의 조건을 잘못 주면 오답이 뜨는 문제.

거리를 기준으로 내림차순하라고 되어 있었기 때문에
sum()으로 해야 하고, 그냥 order by 2 desc 하면
문자열까지 포함된 결과 기준으로 내림차순이기 때문에 오답인 듯.

SELECT route,
       concat(round(sum(d_between_dist), 1), 'km') AS "TOTAL_DISTANCE",
       concat(round(avg(d_between_dist), 2), 'km') AS "AVERAGE_DISTANCE"
FROM   SUBWAY_DISTANCE
GROUP  BY 1
ORDER  BY sum(d_between_dist) DESC;
profile
기본기를 소홀히 하지 말자

0개의 댓글