SELECT

프로그래머스 레벨4짜리 SQL 문제이다. 문제 링크

JOIN과 AVG, GROUP BY 를 섞어서 사용하였다.

평균 계산을 SUM / COUNT 로 안하고 AVG를 바로 쓸 수도 있나보다.

효율적인 쿼리인지는 모르겠지만 일단은 풀 줄은 알아야겠다.

좀 더 연습하면서 익혀봐야지.

이번 문제에서 배운 점은 아래와 같다.

  • 여러개의 함수를 섞는 법
  • 평균 계산법

풀이

SELECT ri.rest_id, ri.rest_name, ri.food_type, ri.favorites, ri.address, ROUND(AVG(rr.review_score), 2) AS score
FROM rest_review rr
JOIN rest_info ri
ON rr.rest_id = ri.rest_id
WHERE ri.address LIKE '서울%'
GROUP BY rr.rest_id
ORDER BY score DESC, ri.favorites DESC

SELECT

프로그래머스 레벨1짜리 SQL 문제이다. 문제 링크

INNER JOIN을 이용하는 문제이다.

저번 문제에서도 Join을 써보긴 했지만 이번 문제까지 풀면서 어느정도 Join에 익숙해진것 같다.

이번 문제에서 배운 점은 아래와 같다.

  • INNER JOIN을 사용하는법

풀이

SELECT b.title, b.board_id, r.reply_id, r.writer_id, r.contents, DATE_FORMAT(r.created_date,"%Y-%m-%d") AS created_date
FROM used_goods_reply AS r
INNER JOIN used_goods_board AS b
ON b.board_id = r.board_id
WHERE MONTH(b.created_date) = 10
ORDER BY r.created_date, b.title

 

SELECT

프로그래머스 레벨1짜리 SQL 문제이다. 문제 링크

SQL에도 SUM, COUNT같은 함수가 있단걸 알았다.

아무래도 기본 문법들은 꾸준히 써보면서 익혀야할 것 같다.

이번 문제에서 배운 점은 아래와 같다.

  1. ROUND, SUM, COUNT의 존재
  2. ROUND로 소숫점 원하는 자리 수까지 반올림해서 표현 가능
    ROUND(컬럼, 원하는 자리 수)

풀이

SELECT ROUND(SUM(daily_fee)/COUNT(car_id), 2) as AVERAGE_FEE
FROM car_rental_company_car
WHERE car_type = "SUV"

SELECT

프로그래머스 레벨1짜리 SQL 문제이다. 문제 링크

주소에서 "강원도" 라는 단어를 포함한 값을 찾는 문제였다.

쉬운 문제였지만 역시 Like 라는걸 이용할 줄 알아야 풀 수 있었다.

이번 문제에서 배운 점은 아래와 같다.

  • Like 를 사용하는 법

풀이

SELECT factory_id, factory_name, address
FROM food_factory
WHERE address LIKE "강원도%"
ORDER BY factory_id

SELECT

프로그래머스 레벨1짜리 SQL 문제이다. 문제 링크

JOIN을 사용하는 문제다.

DB를 JPA로 배우다 보니 QueryDSL을 쓰면서 조인을 써보긴 했지만 기본 문법 지식이 모자라서

막상 써보라고 하면 어떻게 써야할지 몰랐다.

SQL 문제를 여러개 풀어보면서 익히는 수 밖에 없겠다.

이번 문제에서 배운 점은 아래와 같다.

  • LEFT JOIN을 사용하는법

풀이

SELECT fh.flavor
FROM first_half AS fh
LEFT JOIN icecream_info AS info
ON fh.flavor = info.flavor
WHERE fh.total_order > 3000 AND info.ingredient_type = "fruit_based"
ORDER BY fh.total_order DESC

 

SELECT

프로그래머스 레벨2짜리 SQL 문제이다. 문제 링크

역시 기본 문법을 너무 모른다는 생각이 들었다.

DATE_FORMAT의 문법은 이 글에 정리되어 있으니 참고하자.

이번 문제에서 배운 점은 아래와 같다.

  1. DATE_FORMAT으로 날짜 데이터를 포매팅하는 법
    DATE_FORMAT(컬럼, DATE_FORMAT 문법)
  2. IS NOT NULL로 NULL이 아닌 컬럼 필터링

풀이

SELECT member_id, member_name, gender, DATE_FORMAT(date_of_birth, '%Y-%m-%d') AS date_of_birth
FROM member_profile
WHERE (MONTH(date_of_birth) = 3) AND (gender = "W") AND (tlno IS NOT NULL)
ORDER BY member_id

SELECT

프로그래머스 레벨1짜리 SQL 문제이다. 문제 링크

역시 이런 기본적인 문제도 보면 어려워 하니 SQL 기본기가 굉장히 부족하다고 느낀다.

SQL 입문하다시피 하니 대문자, 소문자의 컨벤션 같은건 차차 고쳐야겠다.

이 문제에서 배운 점은 아래와 같다.

  1. IFNULL로 특정 컬럼이 null일 때 원하는 값으로 출력하는 법
    IFNULL(컬럼명, null일 때 출력할 값)
  2. OrderBy 조건이 여러개일 때 설정하는법

풀이

SELECT pt_name, pt_no, gend_cd, age, IFNULL(tlno,"NONE") AS tlno
FROM patient
WHERE (age <= 12) AND (gend_cd = "W")
ORDER BY age DESC, pt_name

SELECT

프로그래머스 레벨2짜리 SQL 문제이다. 문제 링크

GROUP BY의 동작에 대해 좀 더 익혀둬야겠다.

이번 문제를 통해 HAVING, COUNT 도 배울 수 있었다.

이번 문제에서 배운 점은 아래와 같다.

  • GROUP BY, HAVING, COUNT 쿼리
  • COUNT로 조건에 맞는 행의 갯수를 알 수 있음

풀이

SELECT user_id, product_id
FROM online_sale
GROUP BY user_id, product_id
HAVING COUNT(product_id) > 1
ORDER BY user_id ASC, product_id DESC

+ Recent posts