对这个问题感到抱歉(不是因为问这个问题,而是因为它的措辞方式 - 我不......完全确定如何问它......)。
我正在运行以下 SQL 语句:
SELECT
`U`.`user_id` AS `User_ID`
/*A lot of irrelevant stuff*/
COUNT(`U`.`parent_id` = `U`.`user_id`) AS `SubAccounts_Active` #This is the part of the statement with which I'm having trouble.
/*More non-relevant stuff*/
FROM `users` AS `U`;
/*Non-relevant join.*/
我评论的 SQL 部分 (COUNT(U.parent_id = U.user_id)
) 最初只是 0
。
对于每一行,我需要计算表 users
中字段 parent_id
与字段 user_id
匹配的行数.
我认为我的 SQL 可以完成这项工作,但它将结果集扁平化为一行,这对我不起作用(我忘记了 COUNT
和 SUM
都压平结果集(自从我用 SQL 做任何事情以来已经有一段时间了,所以我不确定它的技术术语是什么,但我离题了......)) - 我需要每个的总数行 (user
) 出现在定义的字段 (SubAccounts_Active
) 中。
我需要使用什么 SQL 来实现这个结果?
编辑1
感谢我在第一条评论中收到的建议,我能够偶然发现以下返回正确结果集的 SQL -
SELECT
`U`.`user_id` AS `User_ID`,
COUNT(`C`.`parent_id` = `U`.`user_id`) AS `SubAccounts_Active`
FROM `users` AS `U`
LEFT JOIN `users` AS `C`
ON `C`.`parent_id` = `U`.`user_id`
GROUP BY `U`.`user_id`;
这返回了我期望的结果集,其中每个父帐户子帐户的计数在 SubAccounts_Active 字段中设置。
最佳答案
您可以使用 LEFT JOIN 和计数:
SELECT
`U`.`user_id` AS `User_ID`,
/* A lot of irrelevant stuff */
COUNT(U2.user_id) AS SubAccounts_Active
FROM
`users` AS `U` LEFT JOIN `users` AS `U2`
ON u.parent_id=u2.user_id
GROUP BY
`U`.`user_id`,
/* other fields */
当连接不成功时,U2.user_id 将为 null,否则为非 null。 COUNT 将始终计算 u.parent_id=u2.user_id 的所有行。
关于mysql - 如何为结果集的每一行选择一个字段中的行计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045067/