21. 이름이 없는 동물의 아이디
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL;
22. 조건에 맞는 회원 수 구하기
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED) = 2021 AND
AGE BETWEEN 20 AND 29;
괄호 안에 들어가는 컬럼의 형식은 'DATE', 'DATETIME', 'TIMESTAMP' 여야 합니다.
# YEAR
SELECT YEAR('2024-08-05') -> 2024
# MONTH(리턴 값은 1에서 12 사이)
SELECT MONTH('2024-08-05') -> 8
23. 중성화 여부 파악하기
SELECT ANIMAL_ID, NAME,
IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
24. 카테고리 별 상품 개수 구하기
SELECT SUBSTRING(product_code, 1, 2) AS CATEGORY,
COUNT(product_id) AS PRODUCTS
FROM PRODUCT
GROUP BY 1
ORDER BY 1;
25. 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY 1;
26. 입양 시각 구하기(1)
SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR,
COUNT(*) AS count
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN 09 AND 19
GROUP BY 1
ORDER BY 1;
DATE_FORMAT, TIME_FORMAT
1) DATE_FORMAT(date, format) : format의 정의에 따라 날짜 혹은 시간을 출력
2) TIME_FORMAT(time, format) : DATE_FORMAT과 비슷하지만 시, 분, 초만을 나타냄
'%Y' : 4자리 연도 (예: 2024)
'%y' : 2자리 연도 (예: 24)
'%m' : 2자리 월 (01 ~ 12)
'%d' : 2자리 일 (01~31)
'%H' : 24시간 형식의 시간 (00~23)
'%h' : 12시간 형식의 시간 (01~12)
'%i' : 분 (00 ~ 59)
'%s' : 초 (00 ~ 59)
'%p' : AM 또는 PM
'%a' : 요일의 약어 (예: Sun, Mon)
'%W' : 요일의 전체 이름 (예: Sunday, Monday)
'%M' : 월의 전체 이름 (예: January, February)
'%b' : 월의 약어 (예: Jan, Feb)
'%r' : 12시간 형식의 시간, 분, 초와 AM/PM (예: 02:30:15 PM)
'%T' : 24시간 형식의 시간, 분, 초 (예: 14:30:15)
27. 진료과별 총 예약 횟수 출력하기
SELECT MCDP_CD "진료과 코드", COUNT(*) "5월 예약건수"
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY 1
ORDER BY 2, 1;
28. 12세 이하인 여자 환자 목록 출력하기
SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, 'NONE')
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;
29. 인기있는 아이스크림
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
30. 자동차 종류 별 특정 옵션이 포함된 자동차
SELECT car_type, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE options LIKE '%통풍시트%' OR options LIKE '%열선시트%' OR options LIKE '%가죽시트%'
GROUP BY 1
ORDER BY 1;
-- 또는
SELECT car_type, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE options REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY 1
ORDER BY 1;
정규식을 이용한 검색 REGEXP
LIKE 검색과는 달리 정규식을 이용한 검색방법을 말합니다.
REGEXP는 우리에게 LIKE보다 좀 더 다양한 검색을 할 수 있도록 도움을 줍니다.
1) Matching
기호 | 기능 | 예시 | 설명 |
. | 문자 하나 | '....' | 문자열 4글자 인 것을 찾기 |
| | OR | '하나|둘' | '하나' or '둘'에 해당하는 문자열 찾기 |
[] | []안에 나열된 패턴 문자열 찾기 | '[123]셋' | '1셋' or '2셋' or '3셋' |
^ | 시작하는 문자열 찾기 | '^넷' | '넷'으로 시작되는 문자열 찾기 |
$ | 끝나는 문자열 찾기 | '넷$' | '넷'으로 끝나는 문자열 찾기 |
2) Numbers Limit
기호 | 기능 | 예시 | 설명 |
* | 0회 이상 나타나는 문자 | 'a*' | 'a'가 0번 이상 등장하는 문자열 'a', 'aa', 'b' |
+ | 1회 이상 나타나는 문자 | '장+' | '장'이 1번 이상 등장하는 문자열 |
문자{m, n} | m회 이상, n회 이하 반복되는 문자 | '장{1, 2}' | '장' 1회 이상, 2회 이하 문자열 |
? | 0~1회 나타나는 문자 | '장?' | '장'이 0~1회 |
3) String Group
기호 | 기능 | 예시 | 설명 |
[A-z] | 영어 문자열 찾음 | '^[A-z]' | 영어로 시작하는 문자열 찾음 |
[0-9] | 숫자 문자열 찾음 | '[0-9]+' | 한 개 이상의 숫자가 등장하는 문자열 찾음 |
4) Not
기호 | 기능 | 예시 | 설명 |
[^문자] | [] 안의 문자를 포함하지 않는 문자열 찾음 | '[^장]' | '장'을 포함하지 않는 문자열 찾음 '간장', '장', '간장공장' 은 모두 제외 |
'코딩테스트 > SQL코드카타' 카테고리의 다른 글
SQL 코드카타 51 ~ 60 (0) | 2024.08.05 |
---|---|
SQL 코드카타 41 ~ 50 (0) | 2024.08.05 |
SQL 코드카타 31 ~ 40 (0) | 2024.08.04 |
SQL 코드카타 11 ~ 20 (0) | 2024.08.04 |
SQL 코드카타 1~10 (0) | 2024.08.03 |