You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL统计发帖量超3条及超5条的用户数量?

问题解决:统计不同发帖量阈值的用户数量

你需要从Users和Posts表中统计两类用户的数量:发帖量超过3条的用户、发帖量超过5条的用户,输出格式要求包含NumberOfUsers(用户数)和Posts(阈值标识)两列。

原SQL的问题

你提供的SQL缺少GROUP BY u.Id子句,导致HAVING COUNT(p.Id)>3无法正确筛选单用户的发帖量——没有分组时,COUNT(u.Id)统计的是所有用户-帖子关联记录的总数,而非符合条件的用户数,同时也无法一次性输出两个阈值的统计结果。

正确的SQL实现

方法一:子查询+UNION ALL(直观易懂)

SELECT 
    COUNT(*) AS NumberOfUsers,
    '>3' AS Posts
FROM (
    -- 筛选发帖量>3的用户ID
    SELECT u.Id
    FROM Users u
    INNER JOIN Posts p ON u.Id = p.OwnerId
    GROUP BY u.Id
    HAVING COUNT(p.Id) > 3
) AS users_over_3

UNION ALL

SELECT 
    COUNT(*) AS NumberOfUsers,
    '>5' AS Posts
FROM (
    -- 筛选发帖量>5的用户ID
    SELECT u.Id
    FROM Users u
    INNER JOIN Posts p ON u.Id = p.OwnerId
    GROUP BY u.Id
    HAVING COUNT(p.Id) > 5
) AS users_over_5

方法二:条件聚合(更高效,减少一次分组)

SELECT
    SUM(CASE WHEN post_count > 3 THEN 1 ELSE 0 END) AS NumberOfUsers,
    '>3' AS Posts
FROM (
    -- 先统计每个用户的发帖量
    SELECT u.Id, COUNT(p.Id) AS post_count
    FROM Users u
    INNER JOIN Posts p ON u.Id = p.OwnerId
    GROUP BY u.Id
) AS user_post_stats

UNION ALL

SELECT
    SUM(CASE WHEN post_count > 5 THEN 1 ELSE 0 END) AS NumberOfUsers,
    '>5' AS Posts
FROM (
    SELECT u.Id, COUNT(p.Id) AS post_count
    FROM Users u
    INNER JOIN Posts p ON u.Id = p.OwnerId
    GROUP BY u.Id
) AS user_post_stats

两种方法都能输出你需要的格式:

NumberOfUsersPosts
555>3
888>5

内容的提问来源于stack exchange,提问作者Tomáš grzeho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:05:23