728x90
이전 글
서론
String이나 Date의 경우 함수명을 모르면 틀려야하기 때문에.. 복습이 중요할 것 같다.
빠르게 풀고 꾸준히 복습해야겠다.
문제풀이 사이트: https://school.programmers.co.kr/learn/courses/30/parts/17047
11. 루시와 엘라 찾기 - 레벨2
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID
SQL에서는 배열을 소괄호로 표현한다.
12. 이름에 el이 들어가는 동물 찾기 - 레벨2
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME like '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
그냥 이렇게 돌리면 맞았다고 나온다. 아마 mysql의 기본 collation인 utf8mb4_general_ci 같은 걸 사용했기 때문인 것 같다.
이렇게 되면 '%EL%'이든 '%eL%'이든 다 맞게 나올 것이다.
대소문자를 구분해서 검색하고 싶은 경우 다음과 같이 풀 수 있다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE BINARY NAME like '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
13. 중성화 여부 파악하기 - 레벨2
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
CASE WHEN THEN이나 IF를 사용할 수 있다.
14. 오랜 기간 보호한 동물(2) - 레벨3
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS
INNER JOIN ANIMAL_INS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
ORDER BY (DATEDIFF(OUTS.DATETIME, INS.DATETIME)) DESC
LIMIT 2;
입양간 동물만 조회하기 위해 INNER JOIN을 먼저 수행해줬다.
2마리만 뽑아오기 위해 ORDER BY + LIMIT을 사용해줬다.
보호 기간을 구하기 위해 DATEDIFF를 사용했다.
15. 카테고리 별 상품 개수 구하기 - 레벨2
SELECT SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*) PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY
SUBSTRING 사용법과 그룹바이 사용법만 간단하게 알고있으면 어렵지않게 풀 수 있다.
sql의 SBUSTRING은 시작 인덱스(1부터 시작)와 개수를 매개변수로 넣어줘야한다.
16. DATETIME에서 DATE로 형 변환 - 레벨2
SELECT ANIMAL_ID, NAME, SUBSTRING(DATETIME, 1, 10) AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
17. 연도 별 평균 미세먼지 농도 조회하기 - 레벨2
SELECT YEAR(YM) AS YEAR, ROUND(AVG(PM_VAL1), 2) AS `PM10`, ROUND(AVG(PM_VAL2), 2) AS `PM2.5`
FROM AIR_POLLUTION
WHERE LOCATION2 = '수원'
GROUP BY YEAR
ORDER BY YEAR ASC
그냥 그룹바이 잘 쓰면 된다
18. 한 해에 잡은 물고기 수 구하기 - 레벨1
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE YEAR(TIME) = 2021
쉽다
19. 분기별 분화된 대장균의 개체 수 구하기 - 레벨2
SELECT
CONCAT(CEIL(MONTH(DIFFERENTIATION_DATE) / 3), 'Q') AS QUARTER,
COUNT(*) ECOLI_COUNT
FROM
ECOLI_DATA
GROUP BY
QUARTER
ORDER BY
QUARTER
-- 123 1
-- 456 2
-- 789 3
-- 10,11,12 4
다른 사람의 풀이를 보다 CEIL을 사용하는 걸 보고 나도 사용해봤다.
여러가지 함수를 알아두면 유용할 것 같다.
728x90
'database' 카테고리의 다른 글
| [MySQL] Programmers SQL 고득점 Kit 풀기 - GROUP BY(1) (0) | 2025.02.17 |
|---|---|
| [MySQL] Programmers SQL 고득점 Kit 풀기 - JOIN (0) | 2025.02.14 |
| Programmers SQL 고득점 Kit 풀기 - String, Date(1) (0) | 2025.02.12 |
| Programmers SQL 고득점 Kit 풀기 - IS NULL (0) | 2025.02.12 |
| Programmers SQL 고득점 Kit 풀기 - SUM,MAX,MIN (0) | 2025.02.11 |