我遇到SUM()
了MS SQL Server
and函数的问题MySQL
。
这些是表中的值:
docYear docMonth cli des agent code flag doctype qty
2017 3 C01 D1 A1 12345 X OR 3
2017 3 C01 D1 A1 12345 X FA 3
2017 11 C01 D1 A1 12345 X OR 3
2017 11 C01 D1 A1 12345 X FA 3
该SQL
查询:
SELECT
docYear
, docMonth
, cli
, agent
, code
, flag
, sum(
case
when
doctype = 'FA'
then
qty
else
0
end
) as qtySum
from
tableName
group by
docYear
, docMonth
, cli
, agent
, code
, flag
返回:
2017 3 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
具有相同数据的相同查询MySQL
返回:
2017 3 C01 D1 A1 12345 X 6
2017 11 C01 D1 A1 12345 X 6
如您所见,SUM显然在SQL
和之间做了不同的工作MySQL
。
和SUM()
之间的功能或聚合规则有所不同。SQL
MySQL
SQL版本:
Microsoft SQL Server 2008 R2 (SP2)
MySQL版本:
5.7.23
编辑:我无法更新版本。MS SQL SERVER
我建立的唯一在线小提琴无法正常工作...
非常感谢!
我认为MSSQL Server和MySQL中的“ sum”或“ case when”相同,但是MySQL中的GROUP BY与MSSQL Server不同。
在标准SQL中,应在所有非聚合列周围使用聚合函数。但在您的问题中,“ doctype”列在聚合函数或未聚合的所选列中不存在。
实际上,MySQL使用GROUP BY的方式与SQL Server的方式不同。
在SQL Server中,当您在选择查询中删除“ doctype”时,实际上您是在这样的列表上选择的:
docYear docMonth cli des agent code flag qty
2017 3 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
并且您在SQL Server中的结果是:
2017 3 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
但是GROUP BY中的MySQL逻辑与SQL Server不同,不同之处在于,当您从非聚合列中删除“ doctype”时,它实际上依赖于MySQL中非聚合所选列,您实际上具有如下表:
docYear docMonth cli des agent code flag qty
2017 3 C01 D1 A1 12345 X 3
2017 3 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
2017 11 C01 D1 A1 12345 X 3
在此链接中描述“ MySQL BY GROUP BY的处理”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句