1. SELECT - [상위 n개 레코드] _ LEVEL 1
ANIMAL_INS
테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
[ 정답 쿼리 ]
SELECT name
FROM animal_ins
ORDER BY datetime
LIMIT 1;
2. SELECT - [조건에 맞는 회원수 구하기] _ LEVEL 1
다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO
테이블입니다.
USER_INFO
테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
[ 정답 쿼리 ]
SELECT COUNT(*) users
FROM user_info
WHERE YEAR(joined) = 2021 AND AGE BETWEEN 20 AND 29;
3. GROUP BY - [년, 월, 성별 별 상품 구매 회원 수 구하기] _ LEVEL 4
다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 `USER_INFO` 테이블과 온라인 상품 판매 정보를 담은 ONLINE_SALE
테이블 입니다.
GENDER
컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.
USER_INFO
테이블과 ONLINE_SALE
테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
[ 정답 쿼리 ]
SELECT
YEAR(sales_date) year
, MONTH(sales_date) month
, gender
, COUNT(DISTINCT U.user_id) users
FROM user_info U
JOIN online_sale O ON U.user_id = O.user_id
WHERE gender IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3;
[ 풀이 ]
- 집계의 기준이 구매건수가 아니라 회원수이므로,
COUNT(DISTINCT U.user_id)
🌟🌟 4. SELECT - [업그레이드 된 아이템 구하기] _ LEVEL 2
다음은 해당 게임에서 사용되는 아이템 정보를 담은 ITEM_INFO
테이블과 아이템 관계를 나타낸 ITEM_TREE
테이블입니다.
아이템의 희귀도가 RARE
인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요.
이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
[ 정답 쿼리 ]
-- 풀이 1. 중첩 서브쿼리 활용
SELECT item_id, item_name, rarity
FROM item_info
WHERE item_id IN (
SELECT item_id
FROM item_tree
WHERE parent_item_id IN (
SELECT item_id FROM item_info WHERE rarity = 'RARE'
)
)
ORDER BY 1 DESC;
-- 풀이 2. JOIN 활용
SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY
FROM ITEM_INFO AS A # A : 자식
JOIN ITEM_TREE AS B ON B.ITEM_ID = A.ITEM_ID
JOIN ITEM_INFO AS C ON C.ITEM_ID = B.PARENT_ITEM_ID # C : 부모
WHERE C.RARITY = 'RARE'
ORDER BY A.ITEM_ID DESC;
[ 풀이 ]
- 같은 테이블을 JOIN에 두 번 사용할 수 있다!
- 문제의 의도에 맞게 join key를 설정해서 풀이 2와 같이 풀어보기
WHERE C.RARITY = 'RARE'
: 부모(C)의 희귀도가 RARE인SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY
: 자식(A)의 아이템 ID, 아이템 명, 희귀도를 출력
🌟 5. SELECT - [Python 개발자 찾기] _ LEVEL 1
DEVELOPER_INFOS
테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다.
DEVELOPER_INFOS
테이블에서 Python 스킬을 가진 개발자의 정보를 조회하려 합니다.
Python 스킬을 가진 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.
[ 정답 쿼리 ]
-- 풀이 1. OR 로 조건 나열
SELECT DISTINCT id, email, first_name, last_name
FROM developer_infos
WHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'
ORDER BY 1;
-- 풀이 2. CONCAT_WS함수 사용
SELECT DISTINCT id, email, first_name, last_name
FROM developer_infos
WHERE CONCAT_WS(',', SKILL_1, SKILL_2, SKILL_3) LIKE "%Python%"
ORDER BY 1;
[ 참고 ]
- CONCAT_WS()함수는 CONCAT()과 거의 비슷하지만 단 하나 다른 점이 있음
CONCAT_WS()
: 첫 번째 인자로 구분자(Separator)를 받고, concatenate할 문자열들 사이사이에 해당 구분자를 넣어주는 함수- WS가 word separator의 약자가 아닐까 생각 중
[MYSQL] 문자열 붙이기/합치기 CONCAT, CONCAT_WS(초간단)
안녕하세요, 오늘은 MYSQL에서 문자열을 붙이는 방법에 대해서 알아보도록 하겠습니다. [ 목차 ] 1. CONCAT 2. CONCAT_WS 1. CONCAT MYSQL에서 CONCAT 함수는 두 개 이상의 문자열 인자 값이나, 컬럼값을 순서대
ssd0908.tistory.com
6. String, Date - [중성화 여부 파악하기] _ LEVEL 2
ANIMAL_INS
테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE
컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다.
동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
[ 정답 쿼리 ]
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 1;
'SQL' 카테고리의 다른 글
[프로그래머스] 9주차 MySQL 스터디 1 (0) | 2024.06.05 |
---|---|
RECURSIVE CTE(재귀 CTE) (0) | 2024.06.05 |
[프로그래머스] 8주차 MySQL 스터디 1 (2) | 2024.06.04 |
[프로그래머스] 7주차 MySQL 스터디 2 (1) | 2024.06.04 |
[프로그래머스] 7주차 MySQL 스터디 1 (1) | 2024.06.04 |