MySQL同一张表中关联数据统计(一个SQL语句)

文章介绍了在数据库中统计同一表中自关联数据,即父类下级数量的两种方法。一种是使用子查询,通过循环列表查询每个父类ID的下级总数;另一种是采用关联查询,通过LEFTJOIN操作并进行分组,统计关联ID不为NULL的数量。这两种方法分别适用于不同的查询场景。

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

需求场景:

需要统计同一张表中自关联数据(id与父类id)父类下级有多少个,常见上下级关系,树形关联等

第一种写法(子查询)

思路:按照程序逻辑理解的话,就是先查询出来列表然后循环列表对应查询父类id的下级总数

SELECT
	id,
	username,
	( SELECT COUNT( u_sub.id ) FROM `sxo_user` AS u_sub WHERE u_sub.referrer = u.id ) AS referrer_count 
FROM
	`sxo_user` AS u 
WHERE
	1 
ORDER BY
	referrer_count DESC,
	id ASC

第二种写法(关联查询)

思路:利用数据库A表id关联B表存储的上级id(此处必须为有关系的关联id)统计B表有关联不为NULL的id总数即为上级总数。必须对A表的id进行分组。

SELECT
	u1.id,
	u1.username,
	COUNT( u2.id ) AS referrer_count 
FROM
	`sxo_user` AS u1
	LEFT JOIN `sxo_user` AS u2 ON u1.id = u2.referrer 
WHERE
	1 
GROUP BY
	u1.id 
ORDER BY
	referrer_count DESC,
	u1.id ASC

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值