Postgresql , opposite of a group by



这是我的用例:

我们有一个类似分析的工具,用来统计我们系统上每小时的用户数量。现在,该公司希望拥有一定数量的独特用户。由于我们的用户数量非常少,我们将使用

SELECT count(*)
FROM (
   SELECT DISTINCT user_id
   FROM unique users
   WHERE date BETWEEN x and y
) distinct_users

即,我们将存储成对的user_id, date,并使用DISTINCT计算唯一用户(user_id不是外键,因为用户没有登录,它只是系统生成的唯一标识符,某种uuidv4)就数据量的性能而言,这非常有效。

现在的问题是在中导入遗留数据

我想知道转换的SQL查询

   date    |  number_of_users
   12:00   |     2 
   13:00   |     4

进入

      date |  user_id
   12:00   |     1 
   12:00   |     2 
   13:00   |     1
   13:00   |     2
   13:00   |     3
   13:00   |     4

(只要"计数但不是唯一的"返回与以前相同的数字,如果"唯一用户计数"有点偏离,我们就可以了)

当然,我可以编写python脚本,但我想知道是否有SQL技巧可以做到这一点,使用generate_series或其他相关的

generate_series()确实是一条路:

with data (date, number_of_users) as (
  values 
    ('12:00',2),  
    ('13:00',4)
)
select d.date, i.n
from data d
  cross join lateral generate_series(1, d.number_of_users) i (n)
order by d.date, i.n ;

相关内容

  • 没有找到相关文章

最新更新