mysql - 如何为结果集的每一行选择一个字段中的行计数?

标签 mysql count

对这个问题感到抱歉(不是因为问这个问题,而是因为它的措辞方式 - 我不......完全确定如何问它......)。

我正在运行以下 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 可以完成这项工作,但它将结果集扁平化为一行,这对我不起作用(我忘记了 COUNTSUM 都压平结果集(自从我用 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/

相关文章:

mysql 替换为长文本列返回 NULL 值

mysql - 无法修复表时如何修复 MySQL "Incorrect key file"错误?

PHP 和 Mysqli 获取 count(distinct()) 查询的值

python - 如何根据 pandas 中的值计数制作值列表

php - 计算 MySQL 列中不同值的数量

mysql - 从多个表中选择计数并分组

PHP:mysql_connect() 返回 true 但 mysql_select_db() 返回 false _ 在 Ubuntu 更新后

mysql - 在 n :m relationship table 中选择

python - 获取 Pandas 字符串系列的加权值

android - Firebase android 计数 child 并将其存储在变量中