我有一个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来计算这是否会影响来自此查询的连接数据
答案 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
希望这有帮助!