将所有活动分组到同一行
Group By all activities into the same row
我有一个table类似如下。每个客户每个 activity 的点击次数:
customer activity total
tim view 10
tim view 10
anna view 20
anna buy 10
我想要的输出如下 table:
customer view_count view buy_count buy
tim 2 20 0 0
anna 1 20 1 10
但是,这是我目前返回的table:
customer view_count view buy_count buy
tim 2 20 0 0
anna 1 20 0 0
anna 0 0 1 10
它不会将 anna 的所有 activity 分组到同一行中。这是我试过的查询
SELECT customer,
COALESCE(COUNT(CASE WHEN activity = 'view' THEN customer END), 0) AS view_count,
COALESCE((CASE WHEN activity = 'view' THEN SUM(total) END), 0) AS view,
COALESCE(COUNT(CASE WHEN activity = 'buy' THEN customer END), 0) AS buy_count,
COALESCE((CASE WHEN activity = 'buy' THEN SUM(total) END), 0) AS buy,
FROM table
GROUP BY customer, activity
我假设它出现在多行中的原因是因为我按 activity 分组时的最后一行 GROUP BY customer, activity
。但是,如果我删除它,查询会返回错误,所以我必须包含它。
如果您能给我任何建议,我们将不胜感激。
关闭。思路是:
SELECT customer,
COUNT(CASE WHEN activity = 'view' THEN customer END) AS view_count,
SUM(CASE WHEN activity = 'view' THEN total ELSE 0 END)AS view,
COUNT(CASE WHEN activity = 'buy' THEN customer END) AS buy_count,
SUM(CASE WHEN activity = 'buy' THEN total ELSE 0 END) AS buy
FROM table
GROUP BY customer ;
请注意,CASE
表达式是聚合函数的参数。
你很接近。你可以这样做:
select
customer,
sum(case when activity = 'view' then 1 else 0 end) as view_count,
sum(case when activity = 'view' then total else 0 end) as view,
sum(case when activity = 'buy' then 1 else 0 end) as buy_count,
sum(case when activity = 'buy' then total else 0 end) as buy
from t
group by customer
我有一个table类似如下。每个客户每个 activity 的点击次数:
customer activity total
tim view 10
tim view 10
anna view 20
anna buy 10
我想要的输出如下 table:
customer view_count view buy_count buy
tim 2 20 0 0
anna 1 20 1 10
但是,这是我目前返回的table:
customer view_count view buy_count buy
tim 2 20 0 0
anna 1 20 0 0
anna 0 0 1 10
它不会将 anna 的所有 activity 分组到同一行中。这是我试过的查询
SELECT customer,
COALESCE(COUNT(CASE WHEN activity = 'view' THEN customer END), 0) AS view_count,
COALESCE((CASE WHEN activity = 'view' THEN SUM(total) END), 0) AS view,
COALESCE(COUNT(CASE WHEN activity = 'buy' THEN customer END), 0) AS buy_count,
COALESCE((CASE WHEN activity = 'buy' THEN SUM(total) END), 0) AS buy,
FROM table
GROUP BY customer, activity
我假设它出现在多行中的原因是因为我按 activity 分组时的最后一行 GROUP BY customer, activity
。但是,如果我删除它,查询会返回错误,所以我必须包含它。
如果您能给我任何建议,我们将不胜感激。
关闭。思路是:
SELECT customer,
COUNT(CASE WHEN activity = 'view' THEN customer END) AS view_count,
SUM(CASE WHEN activity = 'view' THEN total ELSE 0 END)AS view,
COUNT(CASE WHEN activity = 'buy' THEN customer END) AS buy_count,
SUM(CASE WHEN activity = 'buy' THEN total ELSE 0 END) AS buy
FROM table
GROUP BY customer ;
请注意,CASE
表达式是聚合函数的参数。
你很接近。你可以这样做:
select
customer,
sum(case when activity = 'view' then 1 else 0 end) as view_count,
sum(case when activity = 'view' then total else 0 end) as view,
sum(case when activity = 'buy' then 1 else 0 end) as buy_count,
sum(case when activity = 'buy' then total else 0 end) as buy
from t
group by customer