TIL

[231213] MySQL 공부

진진리 2023. 12. 13. 23:48
728x90
동명 동물 수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/59041

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

동물의 중복되는 이름과 그 개수를찾는 문제이다.

중복되는 이름의 개수를 어떻게 세면 좋을지 몰라 처음에 어렵게 느껴졌다.

Order by로 이름으로 그룹화해서 각 그룸 내에서 count를 이용해줌으로써 해결할 수 있다.

 

코드

SELECT 
    NAME, 
    COUNT(NAME) AS COUNT
FROM 
    ANIMAL_INS
GROUP BY 
    NAME
HAVING 
    COUNT(NAME) > 1
ORDER BY 
    NAME

 

 

NULL 처리하기

https://school.programmers.co.kr/learn/courses/30/lessons/59410

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

데이터 필드가 null인 경우 다른 값을 넣어줘야 하는 문제이다.

sql 문법에 대해 잘 알지 못해서 검색하여 ISNULL을 사용할 수 있다는 것을 알게 되었다.

 

SELECT 
    ANIMAL_TYPE, 
    IFNULL(NAME, 'No name'), 
    SEX_UPON_INTAKE
FROM 
    ANIMAL_INS

 

그런데 CASE문과 COALESCE도 NULL 값을 다루기 위해 사용할 수 있다는 것을 알게 되었다.

  • CASE문: 특정 경우에 따라 다른 결과를 반환하고자 하는 경우
  • IFNULL: 두 개의 파라미터를 사용
  • COALESCE: 여러 개의 파라미터를 사용 가능
    • 표준 SQL 함수이므로 다양한 RDBS에서 사용이 가능하다!
SELECT 
    ANIMAL_TYPE, 
    COALESCE (NAME, 'No name'), 
    SEX_UPON_INTAKE
FROM 
    ANIMAL_INS

 

 

DATETIME에서 DATE로 형 변환

https://school.programmers.co.kr/learn/courses/30/lessons/59414

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

날짜와 시간이 있는 DATETIME에서 DATE로 형 변환하여 출력하는 문제이다.

SELECT 
    ANIMAL_ID, 
    NAME, 
    LEFT(DATETIME, 10)
FROM 
    ANIMAL_INS
ORDER BY 
    ANIMAL_ID

 

나는 위와 같이 LEFT를 이용하여 풀었는데 이 경우에 사용할 수 있는 DATE_FORMAT 함수가 있다.

SELECT 
    ANIMAL_ID, 
    NAME, 
    DATE_FORMAT(DATETIME, '%Y-%m-%d')
FROM 
    ANIMAL_INS
ORDER BY 
    ANIMAL_ID