SQL 고득점 kit

아현·2021년 9월 27일
0

SQL

목록 보기
1/2

프로그래머스



1. SELECT


1) 모든 레코드 조회하기


-- 코드를 입력하세요
SELECT * from ANIMAL_INS
order by ANIMAL_ID;



2) 역순 정렬하기


-- 코드를 입력하세요
SELECT NAME, DATETIME from ANIMAL_INS
order by ANIMAL_ID desc



3) 아픈 동물 찾기



-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME 
from ANIMAL_INS
where INTAKE_CONDITION = "Sick"
order by ANIMAL_ID;



4) 어린 동물 찾기


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
where INTAKE_CONDITION != "Aged"
order by ANIMAL_ID;



5) 동물의 아이디와 이름



-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
order by ANIMAL_ID;



6) 여러 기준으로 정렬하기


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATETIME
from ANIMAL_INS 
order by NAME, DATETIME desc;



7) 상위 n개 레코드



-- 코드를 입력하세요

SELECT NAME 
From ANIMAL_INS
ORDER BY DATETIME 
LIMIT 1


-- ORACLE
/*
SELECT NAME
FROM (SELECT * FROM ANIMAL_INS ORDER BY DATETIME)
WHERE rownum = 1;
*/





2. SUM, MAX, MIN


1) 최댓값 구하기


-- 코드를 입력하세요
SELECT MAX(DATETIME)
from ANIMAL_INS;



2) 최솟값 구하기


-- 코드를 입력하세요
SELECT MIN(DATETIME)
from ANIMAL_INS;



3) 동물 수 구하기



-- 코드를 입력하세요
SELECT COUNT(ANIMAL_ID)
from ANIMAL_INS;



4) 중복 제거하기


-- 코드를 입력하세요

SELECT COUNT(DISTINCT NAME)
from ANIMAL_INS
where NAME != "NULL";

-- WHERE NAME IS NOT NULL도 가능



3. GROUP BY


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


-- 코드를 입력하세요
SELECT ANIMAL_TYPE, count(ANIMAL_TYPE)
from ANIMAL_INS
group by ANIMAL_TYPE
order by ANIMAL_TYPE;



2) 동명 동물 수 찾기


-- 코드를 입력하세요
SELECT NAME, count(NAME)
from ANIMAL_INS
where NAME is not null
group by NAME
having count(NAME) >= 2
order by NAME;



3) 입양 시각 구하기(1)


-- 코드를 입력하세요
SELECT hour(DATETIME) HOUR, count(DATETIME) COUNT
from ANIMAL_OUTS
group by hour(DATETIME)
having HOUR >= 9 and HOUR < 20
order by hour(DATETIME);



4) 입양 시각 구하기(2)


-- 코드를 입력하세요
set @hour = -1; -- 변수선언

SELECT (@hour := @hour + 1) as HOUR, 
(select count(*) from ANIMAL_OUTS where @hour = hour(DATETIME))
from ANIMAL_OUTS
where @hour < 23;


/*
1. SET 옆에 변수명과 초기값을 설정할 수 있습니다.

2. @가 붙은 변수는 프로시저가 종료되어도 유지된다고 생각하면 됩니다.
- 이를 통해 값을 누적하여 0부터 23까지 표현할 수 있습니다.

3. @hour은 초기값을 -1로 설정합니다. PL/-SQL 문법에서 :=은 비교 연산자 =과 혼동을 피하기 위한의 대입 연산입니다.

4. SELECT (@hour := @hour +1) 은 @hour의 값에 1씩 증가시키면서 SELECT 문 전체를 실행하게 됩니다.
이 때 처음에 @hour 값이 -1 인데, 이 식에 의해 +1 이 되어 0이 저장됩니다.
HOUR 값이 0부터 시작할 수 있습니다.

5. WHERE @hour < 23일 때까지, @hour 값이 계속 + 1씩 증가합니다.


*/



4. IS NULL


1) 이름이 없는 동물의 아이디


-- 코드를 입력하세요
SELECT ANIMAL_ID
from ANIMAL_INS
where NAME is null
order by ANIMAL_ID;



2) 이름이 있는 동물의 아이디


-- 코드를 입력하세요
SELECT ANIMAL_ID
from ANIMAL_INS
where NAME is not null
order by ANIMAL_ID;



3) NULL 처리하기


-- 코드를 입력하세요
SELECT ANIMAL_TYPE, ifnull(NAME, 'No name') as NAME, SEX_UPON_INTAKE
from ANIMAL_INS
order by ANIMAL_ID;



5. JOIN


1) 없어진 기록 찾기



-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME 
from ANIMAL_INS A right join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where A.ANIMAL_ID is null;



2) 있었는데요 없었습니다



-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME 
from ANIMAL_INS A join ANIMAL_OUTS B
where A.ANIMAL_ID = B.ANIMAL_ID and B.DATETIME <= A.DATETIME
order by A.DATETIME



3) 오랜 기간 보호한 동물(1)


-- 코드를 입력하세요
SELECT A.NAME, A.DATETIME 
from ANIMAL_INS A left join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where B.ANIMAL_ID is null
order by A.DATETIME
limit 3;



4) 보호소에서 중성화한 동물


-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
from ANIMAL_INS A join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where A.SEX_UPON_INTAKE != B.SEX_UPON_OUTCOME
order by A.ANIMAL_ID;




6. String, Date


1) 루시와 엘라 찾기


-- 코드를 입력하세요
SELECT distinct ANIMAL_ID, NAME, SEX_UPON_INTAKE
from ANIMAL_INS
where NAME in ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
order by ANIMAL_ID;



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


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
where NAME like "%el%" and ANIMAL_TYPE = "Dog"
order by NAME;



3) 중성화 여부 파악하기


-- 코드를 입력하세요
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
order by ANIMAL_ID;



4) 오랜 기간 보호한 동물(2)


-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME
from ANIMAL_INS A, ANIMAL_OUTS B
where A.ANIMAL_ID = B.ANIMAL_ID
order by B.DATETIME - A.DATETIME desc
limit 2;



5) DATETIME에서 DATE로 형 변환


-- 코드를 입력하세요
/*
%Y(4자리 연도), %y(2자리 연도), %m(월), %d(일), %H(24시간), %h(12시간), %i, %s
*/
SELECT ANIMAL_ID, NAME, date_format(DATETIME, '%Y-%m-%d') as 날짜
from ANIMAL_INS
order by ANIMAL_ID;



profile
For the sake of someone who studies computer science

0개의 댓글