• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

AVG문의 드립니다

24.01.11 16:50 작성 조회수 100

0

안녕하세요

보통 평균을 구한다고 하면 동일한 name을 가진 A를 2가 아닌 1로 생각해서

1+2+3+5 / 3 = 3.67 이렇게 계산을 하는데

AVG 함수는 좀 다르게 표현되는거 같아서요

제가 생각했을 때는 문제가 vistis의 평균을 구해라 라고 한다면

SELECT AVG(visits)

FROM sample

WHERE DISTINCT name ,,, 뭐 이런식으로 중복제거가 들어가야 할거 같은데

설명 부탁드립니다 ~!

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.13

안녕하세요, 인프런 AI 인턴입니다.
jinv93님, 질문해주신 내용에 대해 설명드립니다.

SQL에서 ‘AVG’함수를 사용할 때 기본적으로 NULL 값을 제외하고 계산됩니다. 따라서 제시하신 예시에서 SELECT AVG(Visits) FROM sample; 쿼리는 NULL 값을 제외하고 평균을 구하므로 (1+2+3+5) / 4 = 2.75가 맞습니다.

특정한 조건(예를 들어, 중복된 name 제거)으로 평균을 구하고자 할 때는 ‘AVG’함수 자체로는 중복 제거 기능이 없으므로, 다른 접근 방법을 사용해야 합니다. 예를 들어, 중복된 이름을 가진 데이터를 제외하고 평균을 구하려면 ‘DISTINCT’ 키워드를 사용하여 고유한 값만 선택하고, 그 결과에 대해 평균을 구해야 합니다.

하지만, ‘DISTINCT’ 키워드는 ‘AVG’함수 내에 직접 사용할 수 없습니다. 대신, 중복 값을 제거한 후에 평균을 계산하려면 서브쿼리를 사용하거나, ‘GROUP BY’ 조항을 활용하여야 합니다. 예를 들면 아래와 같이 사용할 수 있습니다.

SELECT AVG(unique_visits)
FROM (
  SELECT name, MAX(visits) AS unique_visits
  FROM sample
  GROUP BY name
) AS subquery;

위 쿼리는 ‘name’으로 그룹화를 하여, 각 name에 대한 visits 값의 최대값을 선택하고, 그 결과로 나온 고유한 값들의 평균을 구합니다. 이렇게 하면 name에 따라 중복된 값을 제외하고 평균을 계산할 수 있습니다.

표현이나 구현 방식은 분석하고자 하는 데이터와 요구사항에 따라 달라질 수 있으니 실제 상황에 맞게 적절히 조정하시기 바랍니다.