mall数据库文件
This commit is contained in:
225
pages/mall/analytics/test/03_test_queries.sql
Normal file
225
pages/mall/analytics/test/03_test_queries.sql
Normal file
@@ -0,0 +1,225 @@
|
||||
-- ============================================
|
||||
-- 数据分析实时大屏 - 测试查询脚本
|
||||
-- ============================================
|
||||
-- 这些查询用于验证实时大屏的数据计算逻辑
|
||||
|
||||
-- ============================================
|
||||
-- 1. 测试实时GMV查询
|
||||
-- ============================================
|
||||
-- 今日GMV
|
||||
SELECT
|
||||
SUM(total_amount) as today_gmv,
|
||||
COUNT(*) as today_order_count
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2;
|
||||
|
||||
-- 昨日同时段GMV(当前时间往前推24小时)
|
||||
SELECT
|
||||
SUM(total_amount) as yesterday_gmv,
|
||||
COUNT(*) as yesterday_order_count
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW() - INTERVAL '1 day')
|
||||
AND created_at <= NOW() - INTERVAL '1 day'
|
||||
AND status = 2;
|
||||
|
||||
-- GMV增长率计算
|
||||
WITH today_stats AS (
|
||||
SELECT
|
||||
COALESCE(SUM(total_amount), 0) as gmv,
|
||||
COUNT(*) as orders
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2
|
||||
),
|
||||
yesterday_stats AS (
|
||||
SELECT
|
||||
COALESCE(SUM(total_amount), 0) as gmv,
|
||||
COUNT(*) as orders
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW() - INTERVAL '1 day')
|
||||
AND created_at <= NOW() - INTERVAL '1 day'
|
||||
AND status = 2
|
||||
)
|
||||
SELECT
|
||||
today_stats.gmv as today_gmv,
|
||||
yesterday_stats.gmv as yesterday_gmv,
|
||||
CASE
|
||||
WHEN yesterday_stats.gmv > 0 THEN
|
||||
ROUND((today_stats.gmv - yesterday_stats.gmv) / yesterday_stats.gmv * 100, 2)
|
||||
ELSE
|
||||
CASE WHEN today_stats.gmv > 0 THEN 100 ELSE 0 END
|
||||
END as gmv_growth_percent,
|
||||
today_stats.orders as today_orders,
|
||||
yesterday_stats.orders as yesterday_orders,
|
||||
CASE
|
||||
WHEN yesterday_stats.orders > 0 THEN
|
||||
ROUND((today_stats.orders - yesterday_stats.orders)::numeric / yesterday_stats.orders * 100, 2)
|
||||
ELSE
|
||||
CASE WHEN today_stats.orders > 0 THEN 100 ELSE 0 END
|
||||
END as order_growth_percent
|
||||
FROM today_stats, yesterday_stats;
|
||||
|
||||
-- ============================================
|
||||
-- 2. 测试在线用户查询
|
||||
-- ============================================
|
||||
-- 最近5分钟内有活动的用户(在线用户)
|
||||
SELECT COUNT(DISTINCT user_id) as online_users
|
||||
FROM user_sessions
|
||||
WHERE last_active_at >= NOW() - INTERVAL '5 minutes'
|
||||
AND is_active = true;
|
||||
|
||||
-- 备用方案:从用户表查询最近5分钟登录的用户
|
||||
SELECT COUNT(*) as online_users_from_users
|
||||
FROM users
|
||||
WHERE last_login_at >= NOW() - INTERVAL '5 minutes';
|
||||
|
||||
-- ============================================
|
||||
-- 3. 测试转化率查询
|
||||
-- ============================================
|
||||
-- 今日下单的唯一用户数
|
||||
SELECT COUNT(DISTINCT user_id) as unique_order_users
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2;
|
||||
|
||||
-- 今日访问用户数(从用户会话表)
|
||||
SELECT COUNT(DISTINCT user_id) as today_visitors
|
||||
FROM user_sessions
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW());
|
||||
|
||||
-- 转化率计算
|
||||
WITH order_users AS (
|
||||
SELECT COUNT(DISTINCT user_id) as count
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2
|
||||
),
|
||||
visitors AS (
|
||||
SELECT COUNT(DISTINCT user_id) as count
|
||||
FROM user_sessions
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
)
|
||||
SELECT
|
||||
order_users.count as order_users,
|
||||
visitors.count as visitors,
|
||||
CASE
|
||||
WHEN visitors.count > 0 THEN
|
||||
ROUND(order_users.count::numeric / visitors.count * 100, 2)
|
||||
ELSE 0
|
||||
END as conversion_rate_percent
|
||||
FROM order_users, visitors;
|
||||
|
||||
-- ============================================
|
||||
-- 4. 综合实时大屏数据查询
|
||||
-- ============================================
|
||||
WITH
|
||||
-- 今日统计
|
||||
today_stats AS (
|
||||
SELECT
|
||||
COALESCE(SUM(total_amount), 0) as gmv,
|
||||
COUNT(*) as orders,
|
||||
COUNT(DISTINCT user_id) as order_users
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2
|
||||
),
|
||||
-- 昨日同时段统计
|
||||
yesterday_stats AS (
|
||||
SELECT
|
||||
COALESCE(SUM(total_amount), 0) as gmv,
|
||||
COUNT(*) as orders,
|
||||
COUNT(DISTINCT user_id) as order_users
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW() - INTERVAL '1 day')
|
||||
AND created_at <= NOW() - INTERVAL '1 day'
|
||||
AND status = 2
|
||||
),
|
||||
-- 在线用户
|
||||
online_users AS (
|
||||
SELECT COUNT(DISTINCT user_id) as count
|
||||
FROM user_sessions
|
||||
WHERE last_active_at >= NOW() - INTERVAL '5 minutes'
|
||||
AND is_active = true
|
||||
),
|
||||
-- 今日访问用户
|
||||
today_visitors AS (
|
||||
SELECT COUNT(DISTINCT user_id) as count
|
||||
FROM user_sessions
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
),
|
||||
-- 昨日同时段访问用户
|
||||
yesterday_visitors AS (
|
||||
SELECT COUNT(DISTINCT user_id) as count
|
||||
FROM user_sessions
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW() - INTERVAL '1 day')
|
||||
AND created_at <= NOW() - INTERVAL '1 day'
|
||||
)
|
||||
SELECT
|
||||
-- GMV数据
|
||||
today_stats.gmv as real_time_gmv,
|
||||
CASE
|
||||
WHEN yesterday_stats.gmv > 0 THEN
|
||||
ROUND((today_stats.gmv - yesterday_stats.gmv) / yesterday_stats.gmv * 100, 1)
|
||||
ELSE
|
||||
CASE WHEN today_stats.gmv > 0 THEN 100.0 ELSE 0.0 END
|
||||
END as gmv_growth,
|
||||
|
||||
-- 订单数据
|
||||
today_stats.orders as real_time_orders,
|
||||
CASE
|
||||
WHEN yesterday_stats.orders > 0 THEN
|
||||
ROUND((today_stats.orders - yesterday_stats.orders)::numeric / yesterday_stats.orders * 100, 1)
|
||||
ELSE
|
||||
CASE WHEN today_stats.orders > 0 THEN 100.0 ELSE 0.0 END
|
||||
END as order_growth,
|
||||
|
||||
-- 在线用户
|
||||
COALESCE(online_users.count, 0) as online_users,
|
||||
|
||||
-- 转化率
|
||||
CASE
|
||||
WHEN today_visitors.count > 0 THEN
|
||||
ROUND(today_stats.order_users::numeric / today_visitors.count * 100, 1)
|
||||
ELSE 0
|
||||
END as conversion_rate,
|
||||
CASE
|
||||
WHEN yesterday_visitors.count > 0 AND yesterday_stats.order_users > 0 THEN
|
||||
ROUND((today_stats.order_users::numeric / today_visitors.count * 100) -
|
||||
(yesterday_stats.order_users::numeric / yesterday_visitors.count * 100), 1)
|
||||
ELSE 0
|
||||
END as conversion_growth
|
||||
FROM today_stats, yesterday_stats, online_users, today_visitors, yesterday_visitors;
|
||||
|
||||
-- ============================================
|
||||
-- 5. 数据验证查询
|
||||
-- ============================================
|
||||
-- 检查今日订单数据
|
||||
SELECT
|
||||
DATE_TRUNC('hour', created_at) as hour,
|
||||
COUNT(*) as order_count,
|
||||
SUM(total_amount) as hour_gmv
|
||||
FROM orders
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
AND status = 2
|
||||
GROUP BY DATE_TRUNC('hour', created_at)
|
||||
ORDER BY hour DESC;
|
||||
|
||||
-- 检查用户会话数据
|
||||
SELECT
|
||||
DATE_TRUNC('hour', created_at) as hour,
|
||||
COUNT(DISTINCT user_id) as unique_visitors
|
||||
FROM user_sessions
|
||||
WHERE created_at >= DATE_TRUNC('day', NOW())
|
||||
GROUP BY DATE_TRUNC('hour', created_at)
|
||||
ORDER BY hour DESC;
|
||||
|
||||
-- 检查最近活动的用户
|
||||
SELECT
|
||||
user_id,
|
||||
last_active_at,
|
||||
NOW() - last_active_at as time_ago
|
||||
FROM user_sessions
|
||||
WHERE last_active_at >= NOW() - INTERVAL '10 minutes'
|
||||
AND is_active = true
|
||||
ORDER BY last_active_at DESC;
|
||||
Reference in New Issue
Block a user