2015-02-12 11 views
0

我有一個針對MySql的查詢,它使用LIMIT和GROUP BY關鍵字。它在MySql上運行良好。查詢是:如何在MSSQL中爲單列使用分組

SELECT 
    tester, 
    firstname, 
    COUNT(*) total 
FROM mnrelease_details a LEFT JOIN users b ON tester='guest' 
WHERE a.project='testpro' 
GROUP BY tester ORDER BY total ASC LIMIT 10; 

我試圖將它翻譯成T-Sql在Sql Server上使用。以下是我對Sql Server

SELECT TOP 10 
     tester, 
     firstname, 
     COUNT(*) total 
FROM mnrelease_details a 
LEFT JOIN users b ON tester='guest' 
WHERE a.project='testpro' 
GROUP BY tester ORDER BY total ASC; 

然而,當我嘗試使用SQL Server上,我得到這個錯誤:

Column 'users.firstname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

爲什麼沒有SQL服務器允許這樣做?爲什麼Sql Server不允許單個GROUP BY而不是添加GROUP BY中的所有列?我只想按tester列進行分組,就像我使用MySql一樣。

回答

0

由於錯誤信息提示時,SQL Server是嚴格非聚合領域是在GROUP BY子句,所以它不會允許這樣做,你需要tester假設測試器後在firstname字段添加到GROUP BY條款獨特且每個都有相同的firstname

有關此問題的更多信息,您可以檢查MySQL Handling of GROUP BY

2

如果您有這樣的數據會怎麼樣?

 
tester firstname 
------ --------- 
    1  Joe 
    2  Bob 
    2  Fred 

您希望顯示測試者2的哪個firstname:Bob或Fred?如果您同時需要,則可以自行將該列添加到組中,因爲名字列是您定義的組的一部分。如果你不在乎,那麼就選擇一個像MIN()MAX()這樣的聚合函數:沒關係。如果你關心,那麼你需要在查詢中建立一些東西來告訴它如何從正確的記錄中選擇值。

問題是原始查詢可能不明確。也許你有這樣的數據,這從來沒有問題,但查詢引擎並不知道這一點。 MySql在這裏的行爲實際上是錯誤的行爲,並且脫離了ansi sql標準(至少對於sql-92和之前的版本)。

相關問題