mysql - 按累积分组计算的不同项目数
问题描述
我有以下查询,它对每个所有者进行不同的项目计数,按月分组
询问:
SELECT owner, Month(date) AS month, Count(DISTINCT( item )) AS cnt
FROM table_name
WHERE impact < 3
AND group IN ( 'Group1', 'Group2', 'Group3')
AND date >= '2019-01-01'
AND date <= '2019-05-02 23:59:59'
GROUP BY owner, month
ORDER BY owner, month;
这会为每个所有者生成每个月的不同项目计数。我想要的是每个所有者累积月份的不同项目计数。对于 2 月,我想要从 1 月到 2 月每个所有者的不同项目计数。对于 3 月,我想要从 1 月到 3 月的每个所有者的不同项目计数,依此类推。有人可以帮忙解决这个问题吗?
解决方案
如果我理解正确,您需要基于该项目第一次出现在所有者面前的累积计数。在 MySQL 8+ 中,您可以使用窗口函数:
SELECT owner, Month(date) AS month,
COUNT(*) as this_month_cnt,
SUM(COUNT(*)) OVER (PARTITION BY owner ORDER BY MONTH(date)) as running_cnt
FROM (SELECT t.owner, t.item, MIN(t.date) as date
FROM table_name
WHERE impact < 3 AND
group IN ( 'Group1', 'Group2', 'Group3') AND
date >= '2019-01-01' AND
date < '2019-05-03'
GROUP BY owner, item
) t
GROUP BY owner, month
ORDER BY owner, month;
推荐阅读
- python - 如何使用 Python 分割视频?
- symfony - LexikJWTAuthenticationBundle 与多个提供者
- c# - 如何防止 EF Core 将 DDD ValueObjects 创建为表
- c# - 铸造泛型类型 C#
- git - 创建仓库的克隆/副本并同步两个仓库
- docker - 在带有 PostgresSql 数据库的 docker 容器中运行简单的 Kotlin Ktor 应用程序
- webpack - webpack 样式、ts 和 css 加载器应该只在当前文件夹内构建文件
- docker - 如何获取单个应用程序的 Docker 容器配置?
- python - 神经网络实际返回三类 2
- c - 使用 Int 和浮点值更新 char 数组,而不使用 sprintf?