2012-02-03 77 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 2012-02-03 22:08:44

+0

我的印象是,mssql服務器使用mysql。沒有? – Colleen 2012-02-03 22:12:08

+0

編號MSSQL服務器是另一種與MySQL幾乎沒有共同之處的產品(除了事實,它們都是SQL關係數據庫管理系統) – Mchl 2012-02-03 22:13:10

回答

1

您不能在WHERE中使用別名。由於它是聚合的,因此您應該用HAVING替換它: HAVING totalcount = ... 此外,您的子查詢可能會返回多於一行,並且您將有另一個錯誤。

+0

謝謝!爲什麼我會有一個錯誤,如果我的子查詢返回多行? – Colleen 2012-02-03 22:13:11

+0

現在我有:\t選擇名稱,計數(不同的PID) \t從鑄件按名稱 具有計數\t(不同PID)=上月中旬= movie.id \t組參加電影 \t \t(選擇最大(CastCount.total ) \t \t from(select count(distinct pid)from casts group by mid)CastCount); 但它返回0行。你對此有何認識? – Colleen 2012-02-03 22:13:41

+2

@Colleen:你正在比較'totalcount'和子查詢的結果。如果後者返回多於一行,'='沒有意義,並且您將需要使用'IN(或ANY,SOME)'取決於您的要求。 – a1ex07 2012-02-03 22:16:15

1

在MySQL中,您無法通過其別名在WHERE子句中引用別名列。

最好的辦法是不要選擇計數等於選定的最大值。相反,按從高到低的順序排列,並限制到第一行。

+0

保持簡單。 +1 – Mchl 2012-02-03 22:14:26

+0

我不應該認爲只有一個。 – Colleen 2012-02-03 22:15:27

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 2012-02-03 22:22:24

+0

@Colleen,已經有一個「GROUP BY」,它將用於所有聚合函數。但是,你說得對,我需要把'WHERE'改成'HAVING',它應該可以工作。 – 2012-02-03 22:25:58