2014-07-19 3 views
-1

두 테이블 (학생과 계정)
모든 학생은 학생 테이블에 하나의 레코드가 있지만 계정 테이블에 두 개 이상의 레코드가있을 수 있습니다.
학생 코드별로 그룹화 된 계정 테이블의 한 열을 요약해야합니다. 학생 테이블
조인 된 테이블의 열을 요약하는 방법은 무엇입니까?

나는 다음과 같은 쿼리를 작성한하지만 명령은 GROUP BY를 사용하는 경우이 오류가 돌아왔다 :

select students.id,students.stcode,students.stname,account.stcode, 
     sum(cast ((account.price) AS INT)) OVER() AS PriceTotal 
from students 
inner join account on students.stcode=account.stcode 
group by students.stcode 

오류 메시지 :Column 'students.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+1

(1)이이 태그가 잘못 지정된되어 MySQL을. 이것은 다른 RDMS입니다. (2) 오류 메시지는 사용자가 잘못한 것을 설명합니다. 오류 메시지를 이해하지 못하면 'GROUP BY'에 대해 읽으십시오. –

+0

검색어에'students.id'가 표시되지 않습니다. 쿼리가 최신 상태입니까? –

답변

1

집계의 일부가 아닌 모든 열을 기준으로 그룹화해야합니다. 즉 students.stname이 students.stcode에 기능적으로 종속되어있는 경우 (예 : students.stcode가 고유 한 경우) students.stcode에 max와 같은 집계를 적용 할 수 있습니다. 이후 account.stcode = students.stcode 제거 할 수 있습니다.

select students.stcode, students.stname 
    , sum(cast (account.price AS INT)) AS PriceTotal 
from students 
join account 
    on students.stcode=account.stcode 
group by students.stcode, students.stname 
:

select students.stcode, max(students.stname) as stname 
    , sum(cast (account.price AS INT)) AS PriceTotal 
from students 
join account 
    on students.stcode=account.stcode 
group by students.stcode 

다른 옵션은 GROUP BY 절에서 students.stname을 포함하는 것입니다 : 나는 우리를 떠나, 오버 절을 내가 하나를 제거 할 수 있도록 여기에 어떻게해야 무엇 확실하지 않다

당신이 윈도우 함수는에 의해 그룹이 필요하지 않습니다 (당신이하지 않는 당신의 게시물을 태그 mysql을)를 지원하는 DBMS를 사용하는 경우 :

select students.stcode, students.stname 
    , sum(cast (account.price AS INT)) over() AS PriceTotal 
from students 
join account 
    on students.stcode=account.stcode 
관련 문제