如何根据列中的值使一行出现多次?

How to make a row appear several times depending on a value in a column?

我正在为有资格赢得抽奖​​的用户创建数据集。所有注册用户都有资格,但是高级用户获得 2 张门票而不是 1 张。如果我有如下 table:

user_id     type
16234       premium
19273       regular
13846       regular
22343       regular
28820       premium

如何打印:

user_id
16234
16234
19273
13846
22343
28820
28820

你可以select全部,然后合并高级用户:

(select user_id from my_table) union all
(select user_id from my_table where type='premium') 

这是一种"BigQuery"表达逻辑的方式:

SELECT u_id
FROM (SELECT 16234 as user_id, 'premium' as type UNION ALL
      SELECT 19273, 'regular'
     ) t JOIN
     UNNEST(ARRAY[t.user_id, t.user_id]) u_id with offset n
     ON n = 1 or type = 'premium';

或者像这样:

SELECT t.user_id
FROM (SELECT 16234 as user_id, 'premium' as type UNION ALL
      SELECT 19273, 'regular'
     ) t CROSS JOIN
     UNNEST(GENERATE_ARRAY(1, (CASE WHEN type = 'premium' THEN 2 ELSE 1 END))) n;

这种方法相对于 UNION ALL 之类的方法的优势在于它很容易泛化。例如,如果高级用户获得了 20 张票,而普通用户只有 5 张,这将更容易实现。