53 lines
1.6 KiB
SQL
53 lines
1.6 KiB
SQL
-- 各等级付费用户的 goods_id 分布
|
|
-- 按 level + goods_id 统计用户数
|
|
|
|
WITH paying_user_goods AS (
|
|
-- 每个付费用户的 goods_id 汇总
|
|
SELECT
|
|
o.account_id,
|
|
o.goods_id
|
|
FROM bi_vala_order o
|
|
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
|
|
WHERE o.pay_success_date IS NOT NULL
|
|
AND o.order_status = 3
|
|
GROUP BY o.account_id, o.goods_id
|
|
),
|
|
user_level AS (
|
|
-- 判定 L1/L2 等级
|
|
SELECT
|
|
account_id,
|
|
array_agg(DISTINCT goods_id) AS goods_ids
|
|
FROM paying_user_goods
|
|
GROUP BY account_id
|
|
),
|
|
user_level_label AS (
|
|
SELECT
|
|
account_id,
|
|
CASE
|
|
WHEN 61 = ANY(goods_ids) THEN 'L1+L2'
|
|
WHEN (57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids))
|
|
AND (31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids))
|
|
THEN 'L1+L2'
|
|
WHEN (57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids)) THEN '仅L1'
|
|
WHEN (31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids)) THEN '仅L2'
|
|
ELSE '其他'
|
|
END AS level
|
|
FROM user_level
|
|
)
|
|
-- 按 level + goods_id 统计用户数
|
|
SELECT
|
|
l.level,
|
|
g.goods_id,
|
|
COUNT(DISTINCT g.account_id) AS user_count
|
|
FROM user_level_label l
|
|
JOIN paying_user_goods g ON l.account_id = g.account_id
|
|
GROUP BY l.level, g.goods_id
|
|
ORDER BY
|
|
CASE l.level
|
|
WHEN 'L1+L2' THEN 1
|
|
WHEN '仅L1' THEN 2
|
|
WHEN '仅L2' THEN 3
|
|
ELSE 4
|
|
END,
|
|
g.goods_id;
|