mysql - count(distinct(person_id)) 不适用于 MySQL 数据库中的窗口函数

标签 mysql sql database relational-database analytics

所以我发现mysql不支持使用像count(distinct(person_id))这样的聚合函数和窗口函数。例如,下面的查询将不起作用。

select count(distinct(person_id)) over ([OrderBy clause])
from <table>;

这个问题的替代方法是什么,它的工作速度与窗口函数一样快?

架构:

create table table1(
check_date date,
person_id  varchar(10)
);

我尝试的查询:

select person_id,count(distinct(person_id))
over (order by check_date range between interval '20' day preceding and current row)
from table1;

需要统计 20 天内登录系统的所有不同人员的数量。

最佳答案

这回答了问题的原始版本。

在 MySQL 8+ 中,您可以使用两个窗口函数来模拟:

select sum(seqnum = 1) over (order by ?) as num_distinct
from (select t.*,
             row_number() over (partition by person_id order by ?) as seqnum
      from <table> t
     ) t;

关于mysql - count(distinct(person_id)) 不适用于 MySQL 数据库中的窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916967/

相关文章:

php - 多个数据库,或始终限制查询

SQL - 有重复时选择最新的记录

python - ImportError : libodbc. so.2:无法打开共享对象文件:没有这样的文件或目录

java - 使用外键从表中检索条目(Hibernate)

database - 如何在数据库中表示二维数据矩阵

php - 无法使用php在数据库中逐行移动

mysql - 从 MySql 查询中排除结果

sql - 使用 SQL 选择接下来 5 年每个月的同一天?

sql - SQL中如何替换Left Join语句中的部分字符串

php - 我的数据会发生冲突吗?