很抱歉这个问题(不是问问题,而是因为它的措辞方式 - 我不是......完全确定怎么问它......)。
我正在运行以下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
。
我需要为每一行计算字段parent_id
与表user_id
中字段users
匹配的行数。
我认为我拥有的SQL会完成这项工作,但它会将结果集展平为一行,这对我不起作用(我忘记了COUNT
和SUM
都被压扁了结果集(已经有一段时间了,因为我已经用SQL做了什么,所以我不确定那个技术术语是什么,但我离题了......)) - 我需要每一行的总数({{1} })出现在定义的字段(user
)中。
我需要使用什么SQL来实现这个结果?
感谢我在第一条评论中收到的建议,我能够偶然发现以下返回正确结果集的SQL -
SubAccounts_Active
这返回了我期望的结果集,其中在SubAccounts_Active字段中设置了每个父帐户子项的计数。
答案 0 :(得分:1)
您可以使用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。
的所有行答案 1 :(得分:0)
http://sqlfiddle.com/#!9/f6707/2
SELECT
p.user_id AS User_ID,
COUNT(DISTINCT c.user_id) AS SubAccounts_Active
FROM users AS p
LEFT JOIN users c
ON p.user_id = c.parent_id
GROUP BY p.user_id