문제 풀이기록/SQL

[HakerRank] Weather Observation Station 4 오답

개발하는 몽키 2025. 3. 21. 14:18

https://www.hackerrank.com/challenges/weather-observation-station-4/problem?isFullScreen=true

 

Weather Observation Station 4 | HackerRank

Find the number of duplicate CITY names in STATION.

www.hackerrank.com

 

문제설명 : 

STATION 테이블에서 중복된 CITY 이름의 개수를 구하는 문제입니다.  정확히 설명하자면 전체 CITY 개수고유한 CITY 개수를 각각 계산하고 그 차이를 구하는 문제입니다.

 

내가 작성한 코드 (틀린 코드) : 

SELECT COUNT(CITY), COUNT(DISTINCT CITY) AS DISTINCT_CITY, DIFFERENCE
FROM STATION
WHERE COUNT(CITY) - COUNT(DISTINCT) = DIFFERENCE;

 

틀린 이유 : 

  • COUNT() 함수를  WHERE 절에 사용하였습니다.
  • WHERE 절에서 STATION 테이블에 없는 DIFFERENCE를 사용하였습니다.(재창조 하였다고 보면 됨.. 무에서 유 ^.^)
  • COUNT()  함수로 개수를 구해서 중복된 값을 빼는건 알았는데 각 절들의 구조를 이해하지 못한채로 우겨넣었습니다.

정답코드 :

SELECT COUNT(CITY) - COUNT(DISTINCT CITY) AS DIFFERENCE
FROM STATION;

 

배운점 :

  • COUNT() 함수는 집계함수 이기 때문에 WHERE 절에 사용할 수 없다.
  • 집계함수는 그룹화 된 데이터나 전체 데이터에 대해서만 작업하므로 WHERE절이 아닌 HAVING 절에서 조건을 걸어야한다. 
  • WHERE 절에 적을 수 있는 것은  FROM 절에서 지정한 테이블의 칼럼이 사용가능하다. 
  • 별칭은 SELECT 절에서만 정의되며, 그 값을 기준으로 필터링 할땐  WHERE 절을 사용해야 한다.