반응형

원래 데이터는 이렇게 있는데

 

2004년 도에 가장 많은 홈런을 날린 팀은?

select  teamID, sum(HR) as homeRuns
from batting
where yearID=2004
group by teamID
order by homeRuns desc;

 

group by 는 공통된 것을 하나의 단위로 묶는 것인데

이 묶음으로 하나로 보려 하는 것이 group by 라서 

group by 한 것을 select * 할 수는 없다

 

즉 group 된 것의 정보에서 뭔가 SUM 이나 계량적인 데이터를 종합해 보려고 할때 유용하다

 

 

 

2004년 도에 가장 많은 홈런을 날린 팀은?

select teamID, sum(HR) as homeRuns
from batting
where yearID=2004 
group by teamID
having SUM(HR) >= 200
order by homeRuns desc;

여기서 having 을 볼 수 있는데 having 은 group by 다음에 조건을 걸 수 있는 키워드 이다

group 으로 묶은 목록들 중에서 다시 조건을 걸기 위해선 where 로는 충족되지 못하기 때문에 하나 더 있다고 볼 수 있다

 

 

 

명령문은 다음 순서대로 실행 되기 때문에 select 를 가장 최상단에 쓰는 쿼리 문에서는  select 다음에 오는 컬럼명에 올 수 있는 것인지에 대한 판단은 아래 순서를 고려해야 한다 (as 별칭 포함)

  1. from
  2. where
  3. group by
  4. having
  5. select
  6. order by

 

 

단일년도에 가장 많은 홈런을 날린 팀은?

select teamID, sum(HR) as homeRuns
from batting
group by teamID
order by homeRuns desc;

 

이렇게 볼 수 잇는데 이때는 같은 팀은 맞는데 연도가 섞여 있으면서 각 연도별에 대한 홈런을 모두 합한 것이 됨으로

 

 

 

 

만약 위 상황에서 같은 팀에서도 연도별 분류 한다면?

select teamID, yearID, sum(HR) as homeRuns
from batting
group by teamID, yearID
order by homeRuns desc;

같은 팀에서도 단일 연도로 분류하여 구 할 수 있다

 

NYA 에 대한 결과는 하단에 더 있지만 생략..

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : subquery  (0) 2023.02.04
DB : Insert into , Delete, Update  (0) 2023.02.03
DB : COUNT, DISTINCT 각종 함수들  (0) 2023.02.01
DB : Case, where  (0) 2023.01.31
DB : 날짜와 관련된 기능들 GETUTCDATE()  (0) 2023.01.30

+ Recent posts