“[columnname]不包含在聚合函数或GROUP BY子句中。”
问题描述:
查询在MySQL而不是在MSSQL工作正常。该小提琴:“[columnname]不包含在聚合函数或GROUP BY子句中。”
的MySQL:http://sqlfiddle.com/#!8/f1959/2
MSSQL:http://sqlfiddle.com/#!6/4d276/2
好像一个事实,即MySQL是让它工作将使一个更快的查询,因为INT的速度会更快通过比变长字符串搜索..
答
查询工作,因为它的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值,则可以获得任何匹配的名称。
MySQL支持哪些SQL Server不:http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html – 2013-03-25 02:10:23