Mysql查询获取总孩子数?

时间:2017-08-09 05:42:30

标签: php mysql

我有一个4个表,我需要从db中获取用户信息,州名,分支名和子项总数。

我在sql下面使用

SELECT  `user_id` ,  `user_name` , state_name, branch_name
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id

但我还需要为每个用户计算孩子的数量,所以我使用下面的查询

SELECT  `user_id` ,  `user_name` , state_name, branch_name, count(child_id)
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id
LEFT JOIN child on parent_id = user_id  group by user_id

我需要问一个问题,可以在整个查询中使用group by来计算这是否会影响来自此查询的连接数据

2 个答案:

答案 0 :(得分:1)

您的JOIN涉及三个表格。由于您是GROUPING BY user_id,每个user_id只有一行将在输出中。让我们采取第一个表状态。如果用户只有一个状态,则GROUP BY不会导致任何问题,因为这一行将在输出中。同样适用于分支。

对于最后一个表'child',如果用户有多个子项(显然根据您的查询),输出中只会出现一行。由于您在'SELECT'中单独使用count(child_id),因此此计数仅在输出中。如果SELECT中的任何其他列都来自'child'表而不是'count',则只有第一个子项的值将出现在输出中。

只要状态表和分支表中每个用户只有一行,输出就不会受到GROUP BY的影响。

答案 1 :(得分:1)

使用子查询可能更容易:

SELECT  `user_id` ,  `user_name` , state_name, branch_name
(SELECT count(*) FROM `child` WHERE `parent_id` = `user_id`) as `child_count` 
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id

希望这有帮助!