2012-02-03 2 views
2

나는 imdb 데이터베이스에서 casts 테이블과 movie 테이블을 가지고 있습니다. 가장 큰 캐스트 (별개의 배우)로 영화의 이름과 캐스트 크기를 찾으려고합니다.SQL Server '잘못된 열 이름'오류

이 내가 생각 해낸 것입니다,하지만 난 "TOTALCOUNT"

이유에

"잘못된 열 이름"오류를 받고 있어요?

또한이 쿼리는 제대로 보이나요?

select name, count(distinct pid) as totalcount 
from casts join movie on mid=movie.id 
where totalcount = 
    (select max(CastCount.total) 
    from (select count(distinct pid) as total from casts group by mid)CastCount) 
group by name; 
+0

MySQL 또는 SQL Server에 대한 질문입니까? 질문에 올바른 태그를 사용하십시오. – Mchl

+0

나는 mssql 서버가 mysql을 사용했다는 인상을 받았다. 아니? – Colleen

+0

아니요. MSSQL Server는 MySQL과 공통점이 전혀없는 또 다른 제품입니다 (별개로 SQL Relational Database Management Systems). – Mchl

답변

1

WHERE에는 별칭을 사용할 수 없습니다. 집계이므로 HAVING으로 바꾸어야합니다. HAVING totalcount = ... 또한 하위 쿼리가 1 행 이상 반환 될 수 있으며 다른 오류가 발생할 수 있습니다.

+0

고마워요! 내 하위 쿼리가 둘 이상의 행을 반환하면 왜 오류가 발생합니까? 지금 – Colleen

+0

내가 가진 : \t 선택 이름, 캐스트에서 \t는 \t \t (선택 최대 (이름 \t 가진 수 (별개의 PID) = 의해 중반 = movie.id \t 그룹에 CastCount.total을 영화에 참여 (별개의 PID)를 계산) \t \t from (선택 개수 (뚜렷한 pid)는 중간에 의한 캐스트 그룹으로부터 합계로 나타냄) CastCount); 하지만 0 행을 반환합니다. 그 이유에 대한 통찰력이 있습니까? – Colleen

+2

@Colleen :'totalcount'와 하위 쿼리의 결과를 비교하고 있습니다. 후자가 1 행 이상을 반환하면'='는 의미가 없기 때문에 요구 사항에 따라'IN (또는 ANY, SOME)'을 사용해야 할 것이다. – a1ex07

1

MySQL에서는 WHERE 절에 별칭을 사용하여 별칭이 지정된 열을 참조 할 수 없습니다.

가장 좋은 건 계좌가 선택한 최대 금액과 일치하지 않는 곳을 선택하는 것이 아닙니다. 대신에 높은 수에서 낮은 수로 순서를 정하고 첫 번째 행으로 제한하십시오.

+0

간단하게하십시오. +1 – Mchl

+0

나는 하나만 있다고 가정하지 않겠다. – Colleen

0

이와 비슷한?

SELECT movie.name, COUNT(casts.id) AS castsize 
FROM cast 
JOIN movie 
ON movie.id = casts.mid 
GROUP BY casts.mid 
HAVING COUNT(casts.id) = MAX(COUNT(casts.id)) 
+0

최대 개수에 대해 영화 ID별로 그룹이 필요하지 않을 수 있습니다. 그렇게 할 수 없으므로 하위 선택이 필요하지 않습니까? – Colleen

+0

@Colleen, 이미 모든 집계 함수에 사용될 GROUP BY가 있습니다. 하지만, 네가 맞아, 내가 어디에서'HAVING'으로 바꿀 필요가있다. –