코드카타/SQL
[ 코드카타 ] SQL | 1~6번
da-hong
2025. 6. 4. 23:56
🗓️ 기간: 5/20 ~ 5/25 (1주차)
< 테이블 정보 >
1. 이름이 있는 동물의 아이디 (5/20)
동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID
이름이 없는 동물만 필터링하기 위해, WHERE 절에 NAME IS NOT NULL 이라는 조건을 추가해준다.
ID 기준으로 오름차순 정렬하기 위해, ORDER BY 절에 ANIMAL_ID를 넣는다.
2. 역순 정렬하기 (5/21)
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요.
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
조회 결과를 ID의 역순으로 정렬하기 위해, ORDER BY 절에 ANIMAL_ID를 넣고 DESC(내림차순)을 붙여준다.
3. 중복 제거하기 (5/22)
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
SELECT COUNT(DISTINCT NAME) AS NAME_COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
중복되는 값 없이 동물의 이름이 몇 개인지 조회하려면 COUNT 함수에 DISTINCT 를 꼭 넣어야 한다.
4. 동물의 아이디와 이름 (5/23)
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
ANIMAL_ID순으로 조회하기 위해 ORDER BY 문에 ANIMAL_ID를 넣어준다.
5. 동물 수 구하기 (5/24)
동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT COUNT(1) COUNT
FROM ANIMAL_INS
데이터의 총 개수를 조회하기 위해, COUNT( )에 아무 컬럼을 넣거나 1을 넣으면 된다.
6. 동명 동물 수 찾기 (5/25)
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME,
COUNT(NAME) COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME
처음에 두 번 이상 쓰인 이름을 필터링하기 위해 WHERE 절에 COUNT(NAME) >= 2 라는 조건을 달았는데, "Invalid use of group function"이라는 오류가 떴다. 찾아보니 WHERE 절은 레코드(행) 하나하나에 대해 필터링하는 구문이라서 COUNT(), SUM() 같은 집계 함수를 사용할 수 없다고 한다. 그 대신, HAVING 절을 사용하여 집계 함수 결과를 필터링해야 한다. HAVING 절은 GROUP BY로 묶인 그룹에 대해 조건을 걸 때 사용하는 절이다.