프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
SELECT COUNT(DISTINCT NAME) COUNT
FROM ANIMAL_INS
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 동물의 이름 개수 조회

3. 이름이 Null인 경우 조회하지 않음

4. 중복되는 이름은 1개로 집계

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
SELECT COUNT(*) COUNT
  FROM ANIMAL_INS
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 동물 마리 수 조회

 

⭐ 집계함수는 Null 제외

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
  SELECT ANIMAL_ID, 
         NAME
    FROM ANIMAL_INS
   WHERE LOWER(NAME) LIKE '%el%'
     AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 이름에 EL이 포함(대소문자 구분 X)

3. 아이디, 이름 조회

4. 이름 오름차순

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
  SELECT ANIMAL_ID, 
         NAME
    FROM ANIMAL_INS
   WHERE (NAME LIKE '%EL%' 
      OR NAME LIKE '%El%'
      OR NAME LIKE '%eL%'
      OR NAME LIKE '%el%')
     AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
;
 
 

연산자 우선 순위가 AND → OR이므로 OR 조건에 () 필요

 

1
2
3
4
5
6
7
8
9
10
11
WITH SUB AS (
  SELECT ANIMAL_ID, NAME
  FROM ANIMAL_INS
  WHERE ANIMAL_TYPE = 'Dog'
)
  SELECT *
    FROM SUB
   WHERE LOWER(NAME) LIKE '%el%'
ORDER BY NAME
;
 
 

공통 표현식 (Common Table Expression, CTE) 사용

 

1
2
3
4
5
6
7
8
  SELECT ANIMAL_ID, 
         NAME
    FROM ANIMAL_INS
   WHERE REGEXP_LIKE(NAME, '[eE][lL]')
     AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
;
 
 

REGEXP_LIKE(NAME, '[eE][lL]')

    - e or E +  l or L 과 일치하는 패턴 탐색

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
  SELECT ANIMAL_ID, 
         NAME, 
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
   WHERE NAME IN ('Lucy''Ella''Pickle''Rogan''Sabrina''Mitty')
ORDER BY ANIMAL_ID
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의

3. 아이디, 이름, 성별 및 중성화 여부화 여부 조회

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
  SELECT ANIMAL_ID, 
         NAME, 
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
   WHERE NAME = 'Lucy' OR 
         NAME = 'Ella' OR 
         NAME = 'Pickle' OR 
         NAME = 'Rogan' OR 
         NAME = 'Sabrina' OR 
         NAME = 'Mitty'
ORDER BY ANIMAL_ID
;
 
 

OR 조건절 사용

 

⭐ 가독성이나 유지보수 측면에서 IN 조건절 사용

 

1
2
3
4
5
6
7
8
9
10
11
12
  SELECT ANIMAL_ID, 
         NAME, 
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
   WHERE 
       CASE 
           WHEN NAME IN ('Lucy''Ella''Pickle''Rogan''Sabrina''Mitty') THEN 1 
           ELSE 0 
       END = 1
ORDER BY ANIMAL_ID
;
 
 

- WHERE 절에서 END = 1은 CASE 문에서 조건이 참인 행(1)만 선택

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
  SELECT NAME, COUNT(NAME) 
    FROM ANIMAL_INS 
GROUP BY NAME 
  HAVING COUNT(NAME) > 1 
ORDER BY NAME;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 두 번 이상 쓰인 이름과

3. 해당 이름이 쓰인 횟수조회

4. 이름이 NULL일 경우, 집계 제외

5. 이름 순 오름차순 조회

 

⭐ 집계함수는 GROUP BY절에 사용된 컬럼을 사용하지 않아도 됨

    - COUNT(*) 가능

    - 단, 해당 문제에서는 이름이 NULL일 경우, 집계에서 제외해야하므로 COUNT(NAME)으로 작성

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
SELECT DISTINCT A.NAME, B.COUNT
  FROM ANIMAL_INS A
  JOIN (
        SELECT NAME, COUNT(NAME) AS COUNT
        FROM ANIMAL_INS
        GROUP BY NAME
        HAVING COUNT(NAME) > 1
        ) B ON A.NAME = B.NAME
ORDER BY A.NAME;
 
 

1. FROM절에 INNER 조인 사용

2. MAIN SELECT절에 DISTINCT 사용

    - DISTINCT를 사용하지 않을 경우, 동명 동물 수 만큼 record가 반환 됨

 

1
2
3
4
5
6
7
8
9
10
WITH SUB AS (
  SELECT NAME, COUNT(NAME) AS NAMECOUNT
  FROM ANIMAL_INS
  GROUP BY NAME
)
  SELECT NAME, NAMECOUNT COUNT
    FROM SUB
   WHERE NAMECOUNT > 1
ORDER BY NAME;
 
 

1. 공통 표현식 (Common Table Expression, CTE) 사용

    - A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following discussion describes how to write statements that use CTEs.

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

MySQL :: MySQL 8.0 Reference Manual :: 13.2.20 WITH (Common Table Expressions)

13.2.20 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following disc

dev.mysql.com