假设有以下表格:

users 表格:包含用户信息,其中 school 表示所在学校,gender 表示性别,created_at 表示用户创建时间。

posts 表格:包含帖子信息,其中 user_id 表示发帖用户的 id,created_at 表示帖子创建时间。

首先需要计算每个学校每种性别的用户数:

SELECT school, gender, COUNT(*) AS user_count 
FROM users 
GROUP BY school, gender;

然后计算每个用户的活跃天数:

SELECT user_id, COUNT(DISTINCT DATE(created_at)) AS active_days 
FROM posts 
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) 
GROUP BY user_id;

接着将上面的查询结果与 users 表格连接起来,得到每个用户所在学校和性别:

SELECT u.school, u.gender, p.active_days 
FROM users u 
JOIN (
    SELECT user_id, COUNT(DISTINCT DATE(created_at)) AS active_days 
    FROM posts 
    WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) 
    GROUP BY user_id
) p ON u.id = p.user_id;

最后可以在上面的查询结果上计算每个学校每种性别的用户的平均活跃天数和平均发帖数量:

SELECT school, gender, 
    AVG(active_days) AS avg_active_days, 
    AVG(posts_count) AS avg_posts_count 
FROM (
    SELECT u.school, u.gender, p.active_days, COUNT(*) AS posts_count 
    FROM users u 
    JOIN (
        SELECT user_id, COUNT(DISTINCT DATE(created_at)) AS active_days 
        FROM posts 
        WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) 
        GROUP BY user_id
    ) p ON u.id = p.user_id 
    JOIN posts ON u.id = posts.user_id 
    WHERE posts.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) 
    GROUP BY u.school, u.gender, p.active_days
) t 
GROUP BY school, gender;
SQL分析学校用户活跃度和发帖数量

原文地址: https://www.cveoy.top/t/topic/n5FT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录