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

如何在MySQL中统计相邻相同值的记录数量

统计MySQL数据表中相邻相同值的记录数量

现有数据表

idstatus
01open
02close
03close
04close
05open
06open
07open
08close
09open
10close

需求

  • 统计相邻相同status值的记录数量
  • 期望结果格式:
statusnumber
open1
close3
open3
close1
open1
close1

解决方案

使用MySQL窗口函数标记分组后统计:

WITH grouped_data AS (
    SELECT 
        id,
        status,
        SUM(CASE WHEN status != LAG(status) OVER (ORDER BY id) THEN 1 ELSE 0 END) 
            OVER (ORDER BY id) AS group_id
    FROM your_table_name -- 替换为你的实际表名
)
SELECT 
    status,
    COUNT(*) AS number
FROM grouped_data
GROUP BY group_id, status
ORDER BY MIN(id);

逻辑说明

  1. LAG(status) OVER (ORDER BY id):按id排序后,获取当前记录的上一条status值,保证顺序与原数据一致。
  2. 通过CASE语句判断当前status是否与上一条不同,不同则标记为1,否则0;再用SUM()累加生成分组IDgroup_id,每段连续相同的status会被分到同一个组。
  3. 最后按group_id和status分组统计记录数,按分组的最小id排序,确保结果顺序符合原数据的相邻逻辑。

内容的提问来源于stack exchange,提问作者Game Vui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:15:31