말하는 컴공감자의 텃밭

Mysql 기초 프로그래머스 문제풀이 모음 본문

알고리즘/Programmers - Mysql

Mysql 기초 프로그래머스 문제풀이 모음

현콩 2024. 7. 29. 18:25
728x90

아픈동물 찾기

 

-- 아픈 동물의 아이디와 이름을 조회 해야하고, 아이디 순으로 정렬해야 함.
-- 아이디 -> ANIMAL_ID, 이름 -> NAME
-- 아픈 상태 조회 -> INTAKE_CONDITION : Sick
-- 
SELECT
ANIMAL_ID, NAME

FROM
ANIMAL_INS

WHERE
INTAKE_CONDITION = "Sick"
ORDER BY ANIMAL_ID ASC;

 

ASC 는 디폴트 값, 역정렬 원하면 DESC


최솟값 구하기

 

-- DATETIME 컬럼에서 가장 빠른값을 찾아야 함.
-- MIN 사용
SELECT MIN(DATETIME)

FROM
ANIMAL_INS

 

MIN 사용해서 최소값 찾아주기


동물 수 구하기

 

-- 테이블 COUNT 함수 사용, ID 개수
SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS;

 

ID 개수로 판단해줬다


중복 제거하기

 

 

-- DISTINCT, GROUP BY -> 정렬 유무 차이 간단하므로 DISTINCT 사용
-- COUNT와 DUSTUNCT로 중복 제거 후 개수 새기
-- AS로 COUNT 별칭 주기


SELECT COUNT (DISTINCT(NAME)) as 개수

FROM ANIMAL_INS

WHERE NAME IS NOT NULL

동명 동물 수 찾기

 

 

-- 중복된 이름, 횟수를 조회 NULL 제외, 이름순으로 정렬
-- COUNT(*)은 행을 세는 함수
-- HAVING 으로 그룹에 조건주기.
-- ORDER BY로 이름순 정렬

SELECT 
NAME, COUNT(*) AS 'COUNT'

FROM ANIMAL_INS

WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*) >= 2
ORDER BY NAME;

년, 월, 성별 별 상품 구매 회원 수 구하기

아 어렵넹

 

-- 년, 월, 성별 별로 카테고리화 하고 정렬할것.
-- YEAR과 MONTH 열 그룹화, DATE에서 YEAR이랑 MONTH만 가져올것
-- USER_ID 로 JOIN
-- SALE 과 INFO 별칭 S와 I로 통일
-- 구매한 회원 수 이므로 DISTINCT USER_ID에 적용
-- 성별 조건 필요 IS NOT NULL + GROUP BY 사용

SELECT
    YEAR(S.SALES_DATE) AS YEAR,
    MONTH(S.SALES_DATE) AS MONTH,
    I.GENDER,
    COUNT(DISTINCT S.USER_ID) AS USERS
FROM
    ONLINE_SALE S
JOIN
    USER_INFO I ON S.USER_ID = I.USER_ID
WHERE
    I.GENDER IS NOT NULL 
GROUP BY
    YEAR(S.SALES_DATE), 
    MONTH(S.SALES_DATE), 
    I.GENDER
ORDER BY
    YEAR, 
    MONTH, 
    I.GENDER;

 


 

하루에 한두개씩 풀어야겠다. 오늘은 여까지

728x90
Comments