Mysql 如何对MSSQL中的单列使用Group By

Mysql 如何对MSSQL中的单列使用Group By,mysql,sql-server,sql-server-2008-r2,Mysql,Sql Server,Sql Server 2008 R2,我有一个为MySql编写的查询,它使用LIMIT和groupby关键字。它在MySql上运行良好。查询是: 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;

我有一个为MySql编写的查询,它使用LIMIT和groupby关键字。它在MySql上运行良好。查询是:

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的支持:

但是,当我尝试在Sql Server上使用该选项时,会出现以下错误:

列“users.firstname”在选择列表中无效,因为它是 不包含在聚合函数或GROUP BY子句中


为什么Sql Server不允许这样做?为什么Sql Server不允许使用单个GROUP BY而不是在GROUP BY中添加所有列?我只想按tester列进行分组,就像我对MySql所做的那样

如错误消息所示,SQL Server严格要求GROUP BY子句中的非聚合字段,因此它不允许这样做,您需要在tester假设tester是唯一的并且每个字段都具有相同的名字之后,将firstname字段添加到GROUP BY子句中


您可以查看有关此问题的更多信息。

如果您有这样的数据怎么办

tester firstname ------ --------- 1 Joe 2 Bob 2 Fred 您希望测试人员2的名字是Bob还是Fred?如果两者都需要,那么您可以自己将该列添加到组中,因为firstname列是您定义的组的一部分。如果您不在乎,那么只需选择一个聚合函数,如MIN或MAX:这并不重要。如果您确实关心,那么您需要在查询中构建一些内容,告诉它如何从正确的记录中选择值

关键是原始查询可能不明确。也许您拥有的数据从来都不是问题,但查询引擎事先并不知道这一点。MySql在这里的行为实际上是错误的,并且至少与ansi sql标准不同,对于sql-92和更早的版本

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