据时长统计收入,为啥重复?

想根据停车时长统计下不同时长下的收入情况,以下查询有啥问题,为啥结果出行多列重复呢?

select date_format(ENTER_TIME,'%%Y-%%m') AS ENTER_MON,
    sum(case when stopping_time <= 30 then actual_receivable else 0 end) as 30mins,
    sum(case when 30 <stopping_time <= 1440 then actual_receivable else 0 end) as 1days,
    sum(case  when   1440< stopping_time <= 4320 then actual_receivable else 0 end) as 3days,
    sum(case  when stopping_time>4320 then actual_receivable else 0 end) as others,
    sum(actual_receivable) as total_fee
    
FROM 
        TB_PARK_RECORD_CAR

img

确认一下表里是不是存在重复的停车记录,用distinct或者是group by看一下计算的时候有没有重复的

没毛病呀,你这sql就是会出现这种结果呀,这种不叫重复好吧

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/347590
  • 这篇博客你也可以参考下:如何处理并发修改同一条数据,乐观锁,悲观锁的实现及应用场景
  • 除此之外, 这篇博客: 为什么聚簇索引只有一个?什么是回表、索引覆盖、左匹配和索引下推?中的 7.什么是索引下推 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • mysql分为三层架构
    在这里插入图片描述

    select * from table where name=?and age=

    在没有索引下推之前:先根据name从存储引擎中获取符合规则的数据,然后再server层对age进行过滤

    有索引下推之后:根据name,age两个的条件来从存储引擎中获取对应的数据

    索引下推原来在server层做的计算,放到存储引擎中计算了,减少了server层和存储引擎层的数据交互

  • 您还可以看一下 MDCC2016老师的移动直播技术专场:百万弹幕下的直播礼物系统课程中的 百万弹幕下的直播礼物系统(上)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    停车时长统计收入重复的原因可能有以下几种可能性:

    1. 查询语句错误:查询语句可能存在错误,导致结果中出现重复的列。请检查查询语句是否正确,并确保使用正确的关键字和语法。

    2. 数据库中存在重复的记录:停车时长统计的收入情况可能是根据某个字段进行聚合统计的,如果数据库中存在重复的记录,那么在统计时就会出现重复的结果。请检查数据库中是否存在重复的记录,并根据需要进行去重操作。

    3. 视图或表定义错误:如果使用了视图来进行停车时长统计,并且视图的定义或者相关表的定义存在错误,那么在查询时就会出现重复的结果。请检查视图或表的定义是否正确,并根据需要进行修正。

    解决这个问题的具体步骤如下:

    1. 检查查询语句:首先检查查询语句,确保语法正确,并使用正确的关键字和操作符。可以使用数据库管理工具或命令行工具执行查询语句,观察结果是否正确。

    2. 检查数据记录:查询数据库中的记录,查看是否存在重复的记录。可以使用SELECT语句查询相关表或视图的记录,并观察是否存在重复的值。如果存在重复的记录,可以考虑使用DISTINCT关键字进行去重操作。

    3. 检查视图或表定义:如果使用了视图来进行停车时长统计,检查视图的定义是否正确,并确保它能够正确地进行统计。可以查看视图的定义语句,确认是否符合预期。如果使用了表进行统计,检查表的定义是否正确,并确保数据能够正确地插入和更新。

    如果以上步骤都没有解决问题,可能需要进一步检查数据库的配置和索引等因素,或者请提供更多关于问题的详细信息,以便进一步分析和解决。