programmers 연습문제

김키키·2022년 8월 24일
0

https://school.programmers.co.kr/learn/challenges

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

SELECT  ANIMAL_TYPE,
        count(ANIMAL_ID) as count
from ANIMAL_INS
group by ANIMAL_TYPE
order by ANIMAL_TYPE

루시와 엘라 찾기

SELECT ANIMAL_ID,
        NAME,
        SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ( 'Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

최솟값 구하기

SELECT DATETIME AS 시간
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

동명 동물 수 찾기

SELECT  NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(*)>=2
AND NAME IS NOT NULL
ORDER BY NAME;

입양 시각 구하기(1)

SELECT hour(datetime) as hour,
        count(hour(datetime)) as count
from animal_outs
where hour(datetime) between 9 and 19
group by hour(datetime) 
order by hour(datetime)

입양 시각 구하기(2)

https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna
0~23시의 입양건수를 구해야 하는데 테이블에는 7~19시의 데이터만 들어있다.
즉 비어있는 시간대의 칼럼과 데이터를 만들어 넣어야 한다는 것.
모르겠는데....??

이름에 el이 들어가는 동물 찾기

like절 : 부분적으로 일치하는 칼럼을 찾을 때 사용한다.
_ : 글자수를 정해줌
% : 글자수를 정해주지 않음

SELECT animal_id,
        name
from ANIMAL_INS
where lower(name) like '%el%'
and animal_type = 'dog'
order by name;

NULL 처리하기

  1. case then 조건문 사용하기
SELECT animal_type, 
        case when name is null
        then 'No name'
        else name
        end name,
        sex_upon_intake
from animal_ins
  1. ifnull() 함수 사용
SELECT animal_type, 
        ifnull(name, 'No name') as name,
        sex_upon_intake
from animal_ins

중성화 여부 파악하기

SELECT animal_id,
        name,
        case 
        when sex_upon_intake like '%Neutered%' then 'O'
        when sex_upon_intake like '%Spayed%' then 'O'
        else 'X' end as '중성화'
from animal_ins

난 조건문을 활용해 노가다로 코드를 작성했지만 더 다양한 방법이 있었다.

  1. or를 활용하면 case when 조건문을 더 간단하게 만들 수 있었다.
SELECT animal_id,
        name,
        case when  
        sex_upon_intake like '%Neutered%' or
        sex_upon_intake like '%Spayed%' then 'O'
        else 'X' end as '중성화'
from animal_ins
  1. if()
SELECT animal_id,
        name,
        if(sex_upon_intake like '%Intact%', 'X', 'O') as '중성화'
from animal_ins

  1. if , insrt()

    insrt() : 문자열(string)에서 지정된 문자열을 검색해 그 위치를 리턴하는 함수.

SELECT animal_id,
        name,
        if(instr(sex_upon_intake, 'intact'), 'X', 'O') as '중성화'
from animal_ins
  1. decode, substr

decode함수 : SQL표준함수는 아니지만 아주 편하며 Case When구문과 동일하다.
예) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, ....)

substr함수 : 지정된 위치에서 특정 길이만큼 문자열을 자른다.
substr('Animal',2) -> nimal

중복 제거하기

SELECT count( distinct name) as count
from animal_ins
where name is not null

DATETIME에서 DATE로 형 변환

to_char() : 날짜, 숫자 등의 값을 문자열로 변환하는 함수

date_format(date, format) : 날짜 포맷 변경 함수

to_char(datetime,'YYYY-MM-DD')
date_format(datetime,'%Y-%m-%d')
profile
로그를 남겨보자

0개의 댓글