我有一张这样的table:
store_id cust_id amount indicator
1 1000 2.05 A
1 1000 3.10 A
1 2000 3.10 A
2 1000 5.10 B
2 2000 6.00 B
2 1000 1.05 A
我要做的是通过只查看唯一的客户ID(即,1号店对1000名客户的两次销售只计算一次),找到每个商店的指标a、b的销售额百分比。像这样:
store_id pct_sales_A pct_sales_B pct_sales_AB
1 1.0 0.00 0.00
2 0.0 0.50 0.50
我知道我可以使用子查询来查找每个事务类型的计数,但是我很难只计算不同的客户id。以下是pct\ U sales\ a列的(不正确)方法:
SELECT
store_id,
COUNT(DISTINCT(CASE WHEN txns_A>0 AND txns_B=0 THEN cust_ID ELSE NULL))/COUNT(*) AS pct_sales_A --this is wrong
FROM (SELECT store_id, cust_id,
COUNT(CASE WHEN indicator='A' THEN amount ELSE 0 END) as txns_A,
COUNT(CASE WHEN indicator='B' THEN amount ELSE 0 END) as txns_B
FROM t1
GROUP BY store_id, cust_id
)
GROUP BY store_id;
2条答案
按热度按时间pcrecxhr1#
可以将条件聚合与
COUNT(DISTINCT)
:根据您的评论,您需要两个聚合级别:
ecfdbz9o2#
我认为您需要两个级别的条件聚合:
db小提琴演示: