sql server与mysql的sum()函数差异

gfttwv5a  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(417)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

两年前关门了。
改进这个问题
我正面临着一个问题 SUM() 函数 MS SQL Server 以及 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

正如你所看到的,和显然做的工作不同 SQL 以及 MySQL .
这两种方法是不同的 SUM() 函数或聚合规则 SQL 以及 MySQL ?
sql版本:

Microsoft SQL Server 2008 R2 (SP2)

mysql版本:

5.7.23

编辑:我无法更新版本。唯一的 MS SQL SERVER fiddle online我发现它不起作用。。。
谢谢!

ghg1uchk

ghg1uchk1#

我认为mssqlserver和mysql中的“sum”或“case-when”是相同的,但mysql中的groupby和mssqlserver不同。
在标准sql中,应该对所有未聚合的列使用聚合函数。但在您的问题中,“doctype”列不存在于聚合函数或未聚合的选定列中。
实际上,mysql使用groupby的方式与sqlserver的方式不同。
在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不同,它的区别在于依赖于mysql中未聚合的选定列当您从非聚合列中删除“doctype”时实际上您有这样一个表:

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处理group by”

相关问题