[프로그래머스|SQL] SQL 연습문제

Sophie·2024년 10월 18일

[TIL] 10/18 SQL 프로그래머스 코딩 테스트 연습

SQL 기본 강의만 쭉 듣고서 캠프 합류 전에 밀려있던 코드카타 풀기 시작 !
강의 들을 때는 당연하게 이해되던 것들이 막상 쓰려고 하니 아직 잘 안떠오르고 어색한 것들이 많았다.
아래는 틀린 문제들 정리 🤦


1. 동명 동물 수 찾기

  • 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59041
  • 문제 : 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
  • 핵심 문법 : GROUP BY -그룹화 기준값- HAVING -추가 조건-

- (오답) 처음 제출답안

        SELECT NAME, COUNT(NAME) 
        FROM ANIMAL_INS 
        WHERE COUNT(NAME)>=2 
        GROUP BY NAME 
        ORDER BY NAME
    -> (오류) **SQL 실행 중 오류가 발생하였습니다.**
    **Invalid use of group function**

- (정답) 수정 후 정상 출력된 코드

→ < GROUP BY > 와 < HAVING > 을 같이 사용했다.
한번 GROUP BY 로 묶은 그룹 내에서 추가 조건이 있다면, WHERE 이 아니라 GROUP BY - HAVING 의 조합을 쓴다.

        SELECT NAME, COUNT(NAME) 
        FROM ANIMAL_INS 
        GROUP BY NAME 
        HAVING COUNT(NAME) >= 2
        ORDER BY NAME

2. 상위 n개 레코드 (제일 먼저 들어온 동물)

- (오답) 처음 제출답안

      SELECT NAME, MIN(DATETIME)
      FROM ANIMAL_INS
      ORDER BY DATETIME
-> DATETIME 에 제일 최소값을 찾으면 될 줄 알았다

- (정답) 수정 후 정상 출력된 코드

→ ORDER BY 에 LIMIT 을 걸어서 상위 데이터를 추출한다

    SELECT NAME
    FROM ANIMAL_INS
    ORDER BY DATETIME LIMIT 1

(+) ❔ 이후 추가 확인 필요한 점 : 다른 문제 풀이 중 아직 해결안된 궁금증
위에꺼는 안되는데 밑에꺼는 왜 MIN(DATETIME) 으로 되는지..? 알아봐야겠다

  • 제일 먼저 들어온 동물 시간
    SELECT MIN(DATETIME) FROM ANIMAL_INS

3. 나이 정보가 없는 회원 수 구하기

- (오답) 처음 제출답안


    SELECT COUNT(AGE) USERS FROM USER_INFO WHERE AGE is NULL

- (정답) 수정 후 정상 출력된 코드

    SELECT COUNT(*) USERS
    FROM USER_INFO
    WHERE AGE IS NULL

0개의 댓글