728x90
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 날짜 형식 변환 DATE_FORMAT 함수
DATE_FORMAT('20230106', '%Y/%m/%d')
> 2023/01/06
지정값 | 구분 | 표시형식 |
%Y | 연 | 4자리 연도 |
%y | 연 | 2자리 연도 |
%m | 월 | 2자리 (00-12) |
%c | 월 | 1자리, 10보다 작을경우 (1-12) |
%M | 월 | 이름(January, February…) |
%b | 월 | 줄인 이름(Jan, Feb…) |
%d | 일 | 2자리 (00-31) |
%e | 일 | 1자리, 10보다 작을경우 (0-31) |
%D | 일 | 1st, 2nd… |
%H | 시 | 24시간 형식 (00-23) |
%h | 시 | 12시간 형식 (01-12) |
%I | 시 | 12시간 형식 (01-13) |
%k | 시 | 24시간 형식, 10보다 작을경우 한자리 (0-23) |
%l | 시 | 12시간 형식, 10보다 작을경우 한자리 (1-12) |
%i | 분 | 2자리 (00-59) |
%S | 초 | 2자리 (00-59) |
%s | 초 | 2자리 (00-59) |
%f | 마이크로초 | 100만분의 1초 |
%p | 오전/오후 | AM/PM |
%T | 시분초 | 24시간 형식 (hh:mm:ss) |
%r | 시분초 오전/오후 | 12시간 형식 (hh:mm:ss AM/PM) |
%j | 일 | 그해의 몇번째 일인지 표시 (001-366) |
%w | 일 | 그주의 몇번째 일인지 표시 (0=일요일, 6=토요일) |
%W | 주 | 이름(Monday,Tuesday…) |
%a | 주 | 줄인 이름(Mon,Tue…) |
%U | 주 | 그해의 몇번째 주인지 표시 (00-53) 일요일이 주의 첫번째일 |
%u | 주 | 그해의 몇번째 주인지 표시 (00-54) 월요일이 주의 첫번째일 |
%X | 연 | 그주가 시작된 해을 표시, %V와 같이 사용 |
%x | 연 | 그주가 시작된 해을 표시, %v와 같이 사용 |
%V | 주 | 그주가 시작된 해의 몇번째 주인지 표시 (01-53) 일요일이 주의 첫번째일 %X 와 함께사용 |
%v | 주 | 그주가 시작된 해의 몇번째 주인지 표시 (01-53) 월요일이 주의 첫번째일 %x 와 함께사용 |
2. 상위 N개 레코드
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
3. 최대값 구하기
SELECT MAX(DATETIME) AS '시간'
FROM ANIMAL_INS;
SELECT DATETIME AS 시간
FROM ANIMAL_INS
ORDER BY DATETIME DESC
LIMIT 1;
4. 중복 제거하기
SELECT COUNT(distinct(NAME)) AS count
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;
5. 입양 시각 구하기(2)
SELECT HOUR, IFNULL(OUTCOUNT,0) AS COUNT
FROM (
SELECT @N := @N + 1 AS HOUR
FROM ANIMAL_OUTS, (SELECT @N := -1 FROM DUAL) nn LIMIT 24
) AS A
LEFT JOIN
(SELECT HOUR(DATETIME) AS HR, count(*) as OUTCOUNT FROM ANIMAL_OUTS GROUP BY HR) AS B
ON A.HOUR = B.HR
- IFNULL(OUTCOUNT, 0)
: NULL값이면 0으로 채워넣기
- DUAL
: 임의의 테이블 만들기
N을 -1로 임시 저장
N은 -1 + 1 = 0
HR이 0~99까지 출력됨
LIMIT 24 추가 시 0~23까지 출력됨
6. 저자 별 카테고리 별 매출액 집계하기
SELECT
B.AUTHOR_ID,
A.AUTHOR_NAME,
B.CATEGORY,
(SUM(S.SALES*B.PRICE)) AS TOTAL_SALES
FROM BOOK AS B
LEFT JOIN BOOK_SALES AS S
ON B.BOOK_ID=S.BOOK_ID
LEFT JOIN AUTHOR AS A
ON B.AUTHOR_ID=A.AUTHOR_ID
WHERE S.SALES_DATE LIKE '2022-01%'
GROUP BY B.AUTHOR_ID, B.CATEGORY
ORDER BY B.AUTHOR_ID, B.CATEGORY DESC
끝!

* 잘 정리해둔 사이트 발견!
728x90
'𝙎𝙌𝙇' 카테고리의 다른 글
inner join과 left outer join 비교 (0) | 2023.01.10 |
---|---|
rank와 dense_rank 차이 (0) | 2023.01.10 |
테이블의 데이트형 확인 (0) | 2023.01.05 |
현재 스키마의 모든 테이블 목록 검색 (0) | 2023.01.05 |
날짜 'VARCHAR형' vs 'DATE형' 장단점 정리 (0) | 2023.01.04 |