ai_member_xiaoxi/scripts/goods_id_distribution.sql
2026-05-23 08:00:01 +08:00

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;