You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中统计取整后连续同一整数分组的重复次数问题

解决MySQL中取整后统计连续相同整数的出现次数问题

你的问题核心是没有先对value字段取整就进行分组,原SQL里直接用原始的小数value做分区,导致取整后相同的数值被当成不同组处理,自然得不到正确的连续次数统计。咱们来修正这个逻辑:

正确的SQL解决方案

SELECT 
    CONCAT(integer_value, '.') AS value,
    COUNT(*) AS consecutive_repetitions
FROM (
    SELECT 
        id,
        -- 对原始value取整,保留整数部分
        TRUNCATE(value, 0) AS integer_value,
        -- 计算分组标识:连续相同整数值的grp会一致
        ROW_NUMBER() OVER(ORDER BY id) - 
        ROW_NUMBER() OVER(PARTITION BY TRUNCATE(value, 0) ORDER BY id) AS grp
    FROM live_records
) AS grouped_data
GROUP BY grp, integer_value
-- 按原始数据的顺序排序,保证结果和预期一致
ORDER BY MIN(id);

关键逻辑解释

  1. 取整处理:用TRUNCATE(value, 0)把原始小数截断为整数(比如7.07变成7,1.39变成1),最后用CONCAT加上.来匹配你期望的输出格式。
  2. 连续分组标识:内层查询的grp字段通过两个ROW_NUMBER()的差值实现:
    • 第一个ROW_NUMBER()按id全局排序,生成连续的序号;
    • 第二个ROW_NUMBER()按取整后的数值分区再排序,生成每个整数组内的序号;
    • 两者的差值对于连续出现的同一整数值会保持不变,这样就能把连续的相同值归为同一个分组。
  3. 统计与排序:最后按grp和取整后的值分组统计数量,并用MIN(id)排序,保证结果顺序和原始数据的顺序一致。

原SQL的问题分析

你之前的查询中,partition by value是基于原始的小数value分区,比如1.00和1.39会被当成不同的分区,导致它们的grp计算结果不同,无法被识别为连续的同一整数组,这就是为什么查询没有生效的原因。

内容的提问来源于stack exchange,提问作者Chris Russo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:51:09