sql语句 关联查询记录 分销情景统计

博客围绕统计主管发展用户数top30展开。描述了主管发展用户的两种方式,给出相关SQL语句并进行分析,通过内连接、where筛选、group by分组及order by排序等操作实现统计,还推荐了SQL格式化在线网站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.情况描述

主管—》代理员 —》发展用户
主管—》发展用户
描述主管可以通过发展代理员进行发展用户 也可以直接发展用户
现需要统计当前所有主管的发展用户数top30 其中需要包含主管单独发展的用户数

二.sql语句

SELECT IFNULL(c.distri_user_id, c.user_id) AS userId, count(*) AS userCount
FROM sys_user b
	JOIN sys_user c ON b.recommender_user_id = c.user_id
WHERE c.distri_user_id IS NOT NULL
		OR c.new_flag = 30
GROUP BY userId
ORDER BY userCount DESC
LIMIT 30

三.分析

  1. 其中别称 b为发展用户 c为代理员/主管 使用内连接进行查询
  2. 关联条件为 b.recommender_user_id=c.user_id 其中发展用户的recommender_user_id是指推荐人id,
    c.user_id为用户id可能为代理员也可能为主管
  3. 接下来 where语句 c.distri_user_id is not null or c.new_flag=30 筛选出符合条件的代理员或者主管
    c.distri_user_id 字段为上级用户id 非空说明该用户为代理员级别,c.new_flag=30 new_flag是一个标识身份的字段说明等于3说明是主管身份
  4. 继续 group by userId 此处如果不加其他处理获得是将是 代理员和主管的统计,通过select 中使用 IFNULL(c.distri_user_id,c.user_id) as userId,可以巧妙的解决该问题,如果有上级id(distri_user_id)则使用上级字段,如果没有该字段说明为主管用户直接发展的用户,直接使用该user_id即可。
  5. 最后order by userCount desc 根据用户数进行倒叙排序 , limit 30 取前30 个数据即可完成。

四.推荐sql格式化在线网站

sql美化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值