“[columnname]不包含在聚合函数或GROUP BY子句中。”

问题描述:

查询在MySQL而不是在MSSQL工作正常。该小提琴:“[columnname]不包含在聚合函数或GROUP BY子句中。”

的MySQL:http://sqlfiddle.com/#!8/f1959/2

MSSQL:http://sqlfiddle.com/#!6/4d276/2

好像一个事实,即MySQL是让它工作将使一个更快的查询,因为INT的速度会更快通过比变长字符串搜索..

+2

MySQL支持哪些SQL Server不:http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html – 2013-03-25 02:10:23

查询工作,因为它的Extended GROUP BY能力上MySQL。这种行为在MySQL可以,如果你启用ONLY_FULL_GROUP_BY SQL模式的限制。

但在SQL Server,你需要明确定义所有GROUP BY子句中未聚合的列这些都对SELECT条款定义

SELECT t.name, COUNT(d.data) 
FROM types AS t 
     LEFT JOIN data AS d ON d.typeId = t.id 
GROUP BY d.typeId, t.name; 

这里有两个SQL Server的查询(SQL Fiddle),这将使你想要而不需要额外的GROUP BY项目的结果。

SELECT t.name, a.ct 
FROM types AS t 
OUTER APPLY (
    SELECT COUNT(d.data) AS ct 
    FROM data AS d 
    WHERE d.typeId = t.id 
) as A 

SELECT 
    t.name, 
    (SELECT COUNT(d.data) 
    FROM data AS d 
    WHERE d.typeId = t.id 
) AS ct 
FROM types AS t 

在这两种情况下(在MySQL),你应该确保有types.name和types.id之间的1对1的关系。至少在SQL Server中,如果不是这样,结果是明确的。在MySQL中,如果给定types.id有多个types.name值,则可以获得任何匹配的名称。