美文网首页
group by前后 数据不一致

group by前后 数据不一致

作者: mysimplebook | 来源:发表于2021-05-26 10:38 被阅读0次

相同的筛选条件,有了group by后数值不一样,如

1、原始sql

SELECT

source,

--platform,

max(source_name) as source_name,

uniqExactMerge(device_id_state) as uv,

toStartOfMonth(toDate(date_str)) as date_str

FROM

mdata_flows_user_realtime_day_all table_alias

WHERE

bd_id != '6'

AND shop_type = '1'

AND type = 'prod'

AND source IN ('1')

AND bd_id IN ('5',

'12')

AND platform IN ('12',

'20')

AND (table_alias.date_str between '2021-05-01' and '2021-05-25'

or table_alias.date_str between '2020-05-01' and '2020-05-25'

or table_alias.date_str between '2021-04-01' and '2021-04-25')

GROUP BY

date_str,

source

--platform

结果:

source_name|source|uv |date_str |

-----------|------|-------|----------|

主站        |1    |1135552|2021-05-01

uv=1135552

2、再加一个group by字段

SELECT

new_id,

--platform,

uniqExactMerge(device_id_state) as uv,

toStartOfMonth(toDate(date_str)) as date_str

FROM

mdata_flows_user_realtime_day_all table_alias

WHERE

bd_id != '6'

AND source = '1'

AND shop_type = '1'

AND type = 'prod'

AND bd_id IN ('5',

'12')

AND platform IN ('12',

'20')

AND (table_alias.date_str between '2021-05-01' and '2021-05-25'

or table_alias.date_str between '2020-05-01' and '2020-05-25'

or table_alias.date_str between '2021-04-01' and '2021-04-25')

GROUP BY

date_str,

new_id

--platform

结果:

new_id|uv |date_str |

------|-------|----------|

    0| 207473|2021-05-01|

    1| 961056|2021-05-01

uv=207473+961056=1168529

3、继续添加一个字段platform

SELECT

new_id,

platform,

uniqExactMerge(device_id_state) as uv,

toStartOfMonth(toDate(date_str)) as date_str

FROM

mdata_flows_user_realtime_day_all table_alias

WHERE

bd_id != '6'

AND source = '1'

AND shop_type = '1'

AND type = 'prod'

AND bd_id IN ('5',

'12')

AND platform IN ('12',

'20')

AND (table_alias.date_str between '2021-05-01' and '2021-05-25'

or table_alias.date_str between '2020-05-01' and '2020-05-25'

or table_alias.date_str between '2021-04-01' and '2021-04-25')

GROUP BY

date_str,

new_id,

platform

结果:

new_id|platform|uv |date_str |

------|--------|------|----------|

    1|20      |193091|2021-05-01|

    1|12      |767966|2021-05-01|

    0|20      | 36139|2021-05-01|

    0|12      |171334|2021-05-01|

uv=767966+171334+36139+193091=1168530

可见,三个完全相同筛选条件的sql,只因为group by字段的不同数据有差异。

具体原因就是去重的顺序影响的,也就是 先汇总再去重 和先group by 再去重的区别。

后者往往会大于等于前者,不同group by分组中可能存在相同的去重字段。

相关文章

  • group by前后 数据不一致

    相同的筛选条件,有了group by后数值不一样,如 1、原始sql SELECT source, --platf...

  • 并发控制

    并发操作带来的数据不一致性有 丢失修改两个事务读入同一数据 不可重复读2次读取未用数据,前后不一致(为了检验) 读...

  • mysql 很实用的函数解析

    数据库数据: CONCAT和CONCAT_WS: GROUP_CONCAT 和GROUP BY: GROUP BY...

  • http请求报错400错误的原因分析

    前后端传输的数据类型不一致,从而导致报错400[https://blog.csdn.net/weixin_3985...

  • 4.20 打卡2

    海外收入的核查难度大,应该仔细比对不同资料里的数字,伪造的数据往往会有前后不一致的漏洞。

  • spring boot 自搭建后台使用(自用)

    #前后端分离 1: `new project->spring initializr-> next->group (...

  • iOS项目结构

    Group 还是Feature 先上下前后两个项目的结构对比图: 旧的项目采用Group的方式,MVC结构,问题如...

  • MySQL 基础语法

    分组数据 数据分组 分组是在SELECT语句的GROUP BY子句中建立的。 GROUP BY子句可以包含任意数目...

  • MongoDB聚合aggregate

    数据准备 $group 查询每个职位的总工资:db.emps.aggregate([{"$group":{_id:...

  • 【MySQL】分组查询(GROUP BY)

    MySQL中使用GROUP BY对数据进行分组,GROUP BY从字面意义上理解就是根据'BY'指定的规则对数据进...

网友评论

      本文标题:group by前后 数据不一致

      本文链接:https://www.haomeiwen.com/subject/fjfksltx.html