Postgresql ,与 group by 相对

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

(只要"count but not unique" returns和之前一样,"unique users count"稍微偏一点就好了)

当然,我可以做一个 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 ;