코드카타/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로 묶인 그룹에 대해 조건을 걸 때 사용하는 절이다.