Presto SQL 类别计数器

Presto SQL category counter

我有以下table

cust_id | category | counts
1       | food     |   2
1       | pets     |   5
3       | pets     |   3

我想得到这个输出

cust_id | food_count | pets_count
1       |    2       |  5
3       |    0       |  3

其中列数映射 category 列中的所有唯一值。您知道如何在 Presto SQL 中完成吗?如果我在 pySpark 中这样做,我会使用 CountVectorizer,但我在 SQL.

上有点挣扎

您可以使用 GROUP BY 和条件求和。例如使用 if 函数:

-- sample data
WITH dataset (cust_id, category, counts) AS (
    VALUES (1, 'food', 2),
        (1, 'pets', 5),
        (3, 'pets', 3)
) 

--query
select cust_id, sum(if(category = 'food', counts, 0)) food_counts, sum(if(category = 'pets', counts, 0)) pets_counts
from dataset
group by cust_id

输出:

cust_id food_counts pets_counts
1 2 5
3 0 3