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

被折叠的 条评论
为什么被折叠?



