본문 바로가기
BackEnd/SQL

SQL문 연습 with 프로그래머스 (2) (MySQL)

by Chaedie 2023. 2. 11.
728x90

SUM(), AVG(), ROUND(), TRUNCATE()

SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'

AVG() : 평균

SUM() : 합

ROUND( , ) : 반올림

TRUNCATE() : 내림

DATEDIFF()

DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2

SELECT HISTORY_ID, 
       CAR_ID,
       DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
       DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
       IF(DATEDIFF(END_DATE, START_DATE) >= 29, '장기 대여','단기 대여') AS RENT_TYPE 
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC

문제에서 30일 이상이라고 했는데 왜 29이상인지는 모르겠지만…

DATEDIFF() : 두 기간 사이의 일수 계산

TIMEDIFF() : 두 기간 사이의 시간 계산

PERIOD_DIFF() : 두 기간 사이의 개월 수 계산

TIMESTAMPDIFF() : 두 기간 사이의 시간 계산

이런 함수들을 알게 되었다.

COUNT(), DISTINCT

SELECT COUNT(*) AS 'count'
FROM ANIMAL_INS
  • 동물 수 구하기
-- 코드를 입력하세요
SELECT COUNT(DISTINCT NAME) AS 'count'
FROM ANIMAL_INS
  • 중복을 제거하면서 NAME컬럼의 갯수를 세는 방법

가격이 가장 비싼 식품의 정보 출력하기

  • 내 코드
-- 코드를 입력하세요
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1

이것도 정답은 맞지만… 검색해보니

SELECT * 
FROM FOOD_PRODUCT 
WHERE PRICE = 
(SELECT MAX(PRICE) PRICE FROM FOOD_PRODUCT);

이런 코드가 있더라… 뭐가 더 좋은지는 모르겠지만 다양한 방법이 있다는걸 알게되었음…!

중성화 여부 파악하기

-- 코드를 입력하세요
SELECT ANIMAL_ID, 
       NAME, 
       IF(SEX_UPON_INTAKE LIKE 'Neutered%' OR
          SEX_UPON_INTAKE LIKE 'Spayed%', 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

IF 문 안에 LIKE OR 과 같은 연산자들을 활용해서 조금 더 복잡한 조건을 만들어 낼 수 있다.

고양이와 개는 몇 마리 있을까

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS 'count'
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

3월에 태어난 여성 회원 목록 출력하기

-- 코드를 입력하세요
SELECT MEMBER_ID, 
       MEMBER_NAME,
       GENDER,
       DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE GENDER = "W" AND DATE_OF_BIRTH LIKE '%-03-%' AND TLNO IS NOT NULL
ORDER BY MEMBER_ID

댓글