SQL Server和MySQL之间的SUM()函数差异

用户名

我遇到SUM()MS SQL Serverand函数的问题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()之间功能或聚合规则有所不同SQLMySQL

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mysql 和 SQL Server 之间的语法差异

SQL Server中_%_%和__%之间的差异

javascript函数和sql server STD距离之间计算出的距离差异

Excel 和 SQL Server 之间的日期差异计算

Nodejs SQL查询和MySQL查询之间的数据差异

SQL Server sum函数

SQL Server 和 SQLite 'LIKE' 函数之间的区别

用于日期差异的SQL Server窗口函数

SQL Server中的数字,浮点数和小数之间的差异

varchar和nvarchar SQL Server数据类型之间的主要性能差异是什么?

SQL Server中不存在和左联接之间的性能差异

使用Year()和使用dateAdd在SQL Server中计算Year之间的性能差异是什么?

SQL Server ID 列和 DDL selectedindex 之间的 ASP.NET DropDownList 差异

Java和mysql中相同SQL查询的运行时间之间存在巨大差异

SQL透视和计算存储为字符串的日期之间的差异-MySQL

mysql和sql server之间为多个用户同步

超越声音和差异 - SQL Server

SQL Server 日期差异查询和修剪

MySQL和SQLite在SQL中的差异

SQL Server-无效查询,因为没有聚合函数或用于比较2个日期之间的差异的group by子句

2个表中“名称”列之间的SQL差异函数

sql server中2个datetime之间的差异

获得两次SQL Server 2012之间的差异

SQL:行和列之间的数量差异

标准 SQL 和 Teradata 强制转换语法之间的语义差异

旧版和标准 sql 之间的 BigQuery 表分区差异

在 SQL 中查找日期时间和时间之间的差异

DEFAULT和赋值运算符之间的PL / SQL差异

SQL Server使用基于等级的SUM函数