-
[프로그래머스]Lv.1 문제 모음SQL 2023. 4. 13. 18:01
호기롭게 Lv.4 문제를 도전하였으나 기초 연습을 해야할 필요성을 느껴 Lv.1부터 다시 시작.
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 FROM ANIMAL_INS WHERE name IS NULL ORDER BY animal_id;
6. 동물의 아이디와 이름
SELECT animal_id, name FROM animal_ins ORDER BY animal_id;
7. 여러 기준으로 정렬하기
SELECT animal_id, name, datetime FROM animal_ins ORDER BY name, datetime desc;
8. 상위 n개 레코드
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME limit 1;
rank나 rownum(오라클에서 주로 사용하는 듯)을 쓰려면 서브쿼리로 해야하는 것 같다.
왜냐면 rank 함수는 select 절에서만 쓸 수 있기 때문이다.
이 문제에서는 랭킹을 출력하는 것을 원하지 않는다.
순위 함수 쓰는 방법
- 각각의 차이는 중복값 처리 방법
RANK() OVER (ORDER BY 컬럼) 1,2,2,2,5
DENSE_RANK() OVER (ORDER BY 컬럼) 1,2,2,2,3
ROW_NUMBER() OVER (ORDER BY 컬럼) 1,2,3,4,5
[순위 함수 설명]
https://doorbw.tistory.com/221
9. 이름이 있는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID;
10. 최댓값 구하기
SELECT MAX(DATETIME) AS 시간 FROM ANIMAL_INS;
여기까지는 옛날에 풀었던 것.
11. 강원도에 위치한 생산공장 목록 출력하기
SELECT factory_id, factory_name, address FROM food_factory WHERE ADDRESS like('강원도%') ORDER BY factory_id;
12. 경기도에 위치한 식품창고 목록 출력하기
SELECT warehouse_id, warehouse_name, address, IFNULL(freezer_yn, 'N') as FREEZER_YN FROM food_warehouse WHERE address like('경기도%') ORDER BY warehouse_id;
NULL값 처리 방법 배웠다.
select 절에 써야 한다.
조건만 나오면 습관적으로 WHERE 절에 쓰려고 한다.
NULL 처리 방법
https://velog.io/@gillog/DB-MySQL-NULL-%EC%B2%98%EB%A6%ACIFNULL-CASE-COALESCE
13. 나이 정보가 없는 회원 수 구하기
SELECT COUNT(USER_ID) AS USERS FROM user_info WHERE AGE IS NULL;
14. 조건에 맞는 회원 수 구하기
SELECT COUNT(user_id) AS USERS FROM USER_INFO WHERE 20<=AGE AND AGE<=29 AND joined LIKE('2021%');
15. 가장 비싼 상품 구하기
SELECT max(PRICE) as MAX_PRICE FROM product;
16. 12세 이하인 여자 환자 목록 출력하기
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') FROM PATIENT WHERE AGE<= 12 AND GEND_CD = 'W' ORDER BY AGE DESC, PT_NAME;
17. 흉부외과 또는 일반외과 의사 목록 출력하기
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, "%Y-%m-%d") FROM DOCTOR WHERE MCDP_CD IN('CS', 'GS') ORDER BY HIRE_YMD DESC, DR_NAME;
날짜 형식 바꾸는 거 헷갈린다.
DATE_FROMAT(컬럼명, "원하는 형태")
https://bramhyun.tistory.com/28
18. 인기 있는 아이스크림
SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
19. 조건에 맞는 도서 리스트 출력하기
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') as PUBLISHED_DATE FROM BOOK WHERE CATEGORY = '인문' AND PUBLISHED_DATE LIKE('2021%') ORDER BY PUBLISHED_DATE;
20. 평균 일일 대여 요금 구하기
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE= 'SUV';
ROUND 함수: 반올림
- ROUND(컬럼명): 소수점 첫번째 자리에서 반올림(정수로 만들어줌)
- ROUND(컬럼명, n) 출력할 소수점 자리 지정
n = 1이면 두번째 자리에서 반올림 -> 첫번째 자리까지 표시
TRUNCATE(컬럼명, 1): 버림
FLOOR(컬럼명): 소수점 아래 버림
https://junyoung-developer.tistory.com/62
'SQL' 카테고리의 다른 글
[프로그래머스]과일로 만든 아이스크림 고르기(LV.1) (0) 2023.06.11 [프로그래머스]자동차 대여 기록에서 장기/단기 대여 구분하기(Lv.1) (0) 2023.04.17 [프로그래머스]입양 시각 구하기(Lv.4) (0) 2023.04.12 [프로그래머스]우유와 요거트가 담긴 장바구니(Lv.4) (0) 2023.04.12 [프로그래머스]식품분류별 가장 비싼 식품의 정보 조회하기(Lv.4) (0) 2023.04.10