[MySQL] MAX, MIN, COUNT, DISTINCT, IS NOT NULL

2020. 11. 22. 19:10MySQL

<문제 1. MAX>

가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

<정답>

SELECT MAX(DATETIME) FROM ANIMAL_INS;

----------------------------------------------------------------------------------------

<문제 2. MIN>

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

<정답>

SELECT MIN(DATETIME) FROM ANIMAL_INS;

----------------------------------------------------------------------------------------

<문제 3. COUNT>

동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

<정답>

SELECT COUNT(*) AS `동물 수` FROM ANIMAL_INS;

----------------------------------------------------------------------------------------

<문제 4. DISTINCT & IS NOT NULL>

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요.

이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

<정답>

SELECT COUNT(DISTINCT NAME) AS `이름 수` FROM ANIMAL_INS WHERE NAME IS NOT NULL;

 

[DISTINCT 사용 시 주의할 점]

  • DISTINCT 키워드는 옆에 온 모든 컬럼을 고려하여 중복 제거를 진행합니다.

  • 즉, SELECT DISTINCT COL1, COL2 …를 진행할 경우

    • COL1과 COL2 값이 모두 동일한 row들을 1개로 칩니다.
  • 다시 말하면, DISTINCT 는 SELECT 구문에 여러 컬럼명이 올 때, 그 중 한 개에 대해서만 적용할 수 없다는 말이 됩니다.

    • SELECT (DISTINCT COL1), COL2 FROM …는 오류입니다.

    • COL1 의 중복된 데이터를 제거한 뒤 COL2를 가져와야 할 텐데, 이 중 어떤 COL2 값을 가져와야 하는지 알 수 없기 때문입니다.

    • COL1COL2

       

      위에서 COL1에 대해서만 DISTINCT를 한다고 예를 들어 보겠습니다.

      A는 중복이 제거되어 A 하나만 보여져야 할 것입니다.

      그러나, 테이블에 열은 2개가 존재합니다.

      COL1 열 하나에 대해서 중복제거를 하면, COL2 에 있는 값인 1과 2 중 어느 것을 출력해야 하는지 모호합니다.

      그러므로 DISTINCT 는 모든 컬럼을 고려하여 진행할 수 밖에 없습니다.

 

[출처: chanhuiseok.github.io/posts/db-4/]