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

如何编写SQL查询关联6张表,统计各国用户及学科订阅数据

解决方案

没问题,我来帮你搞定这个统计需求。首先得确保我们能覆盖所有国家(哪怕这个国家没有用户也要显示出来),同时准确计算各个指标,下面是完整的SQL查询语句:

SELECT
    c.short_name AS 国家名称,
    COUNT(DISTINCT u.id) AS 总用户数,
    SUM(CASE WHEN u.status = 2 THEN 1 ELSE 0 END) AS 活跃用户数,
    SUM(CASE WHEN u.status = 1 THEN 1 ELSE 0 END) AS 非活跃用户数,
    COUNT(DISTINCT usd.user_id) AS 学科订阅用户数
FROM
    countries c
LEFT JOIN `user` u ON c.country_id = u.country_id
LEFT JOIN user_subscribed_disciplines usd ON u.id = usd.user_id
GROUP BY
    c.country_id, c.short_name
ORDER BY
    c.short_name;

关键逻辑说明:

  • 覆盖所有国家:用LEFT JOIN关联countries和user表,确保即使某个国家没有任何用户,也会出现在结果里,对应的用户数指标会显示为0。
  • 总用户数:用COUNT(DISTINCT u.id)避免重复统计(虽然user.id是主键,但加上DISTINCT更保险,防止意外关联导致的重复行)。
  • 活跃/非活跃用户数:用CASE WHEN配合SUM精准统计符合状态条件的用户数量,对应你给出的规则:status=2为活跃,status=1为非活跃。
  • 学科订阅用户数:通过关联user_subscribed_disciplines表,统计有至少一条学科订阅记录的用户数,DISTINCT能避免同一个用户因订阅多个学科被多次统计。

另外提个小细节:你写的disciplin表名可能是笔误?我默认写成discipline了,如果实际表名就是disciplin,你把查询里的关联部分改过来就行。还有user是SQL的关键字,所以用反引号`把它括起来,避免语法报错。

内容的提问来源于stack exchange,提问作者Karen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:05:28