我怎样才能 select 行计数到结果集的每一行的字段中?
How can I select a row count into a field for each row of the result set?
抱歉这个问题(不是问这个问题,而是它的措辞方式 - 我不是......完全确定如何问这个问题......)。
我运行以下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
与 table users
中的字段 user_id
相匹配的行数。
我认为 SQL 我可以完成这项工作,但它会将结果集展平成一行,这对我不起作用(我忘记了 COUNT
和 SUM
都压平了结果集(自从我用 SQL 做了任何事情以来已经有一段时间了,所以我不确定它的技术术语是什么,但我离题了......)) - 我需要定义字段 (SubAccounts_Active
) 中每行 (user
) 的总数。
我需要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 将为空,否则为非空。 COUNT 将始终计算 u.parent_id=u2.user_id.
的所有行
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
抱歉这个问题(不是问这个问题,而是它的措辞方式 - 我不是......完全确定如何问这个问题......)。
我运行以下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
与 table users
中的字段 user_id
相匹配的行数。
我认为 SQL 我可以完成这项工作,但它会将结果集展平成一行,这对我不起作用(我忘记了 COUNT
和 SUM
都压平了结果集(自从我用 SQL 做了任何事情以来已经有一段时间了,所以我不确定它的技术术语是什么,但我离题了......)) - 我需要定义字段 (SubAccounts_Active
) 中每行 (user
) 的总数。
我需要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 将为空,否则为非空。 COUNT 将始终计算 u.parent_id=u2.user_id.
的所有行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