计数窗口函数 MySQL 中每个分区的最大计数
Posted
技术标签:
【中文标题】计数窗口函数 MySQL 中每个分区的最大计数【英文标题】:max count for each partition in count windowing function MySQL 【发布时间】:2020-07-17 07:52:27 【问题描述】:我正在使用 mysql 8.0
我有一张如下所示的表格:
id user_id item_id time
1 3111 4423 2020-06-01 01:00:00
2 3111 4423 2020-06-01 02:00:00
3 2971 36 2020-06-01 01:00:00
4 2971 36 2020-06-01 02:00:00
5 2971 36 2020-06-01 03:00:00
6 2971 815 2020-06-01 22:00:00
我正在尝试按 user_id、item_id 进行分区并创建一个列来计算该分区的行数。
我已经完成了:
select *
, count(id) over(partition by user_id, item_id order by time) as cnt
from table
这个输出:
id user_id item_id time cnt
1 3111 4423 2020-06-01 01:00:00 1
2 3111 4423 2020-06-01 02:00:00 2
3 2971 36 2020-06-01 01:00:00 1
4 2971 36 2020-06-01 02:00:00 2
5 2971 36 2020-06-01 03:00:00 3
6 2971 815 2020-06-01 22:00:00 1
这几乎是我想要的,但是我想要每个分区的最大 cnt 值。
期望的输出:
id user_id item_id time cnt
1 3111 4423 2020-06-01 01:00:00 2
2 3111 4423 2020-06-01 02:00:00 2
3 2971 36 2020-06-01 01:00:00 3
4 2971 36 2020-06-01 02:00:00 3
5 2971 36 2020-06-01 03:00:00 3
6 2971 815 2020-06-01 22:00:00 1
提前致谢。
编辑:
这仍然输出相同的结果...
SELECT *
, max(cnt) over(partition by user_id, item_id order by time) as max_cnt
FROM ( select *
, count(id) over(partition by user_id, item_id order by time) as cnt
from table) subtable;
【问题讨论】:
【参考方案1】:只需从调用COUNT
中删除ORDER BY
子句:
SELECT *, COUNT(id) OVER (PARTITION BY user_id, item_id) AS cnt
FROM yourTable;
以这种方式使用COUNT
只会返回每个用户/项目分区的记录总数,这似乎是您想要的。
【讨论】:
以上是关于计数窗口函数 MySQL 中每个分区的最大计数的主要内容,如果未能解决你的问题,请参考以下文章