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

时间:2015-10-09 18:36:46

标签: 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

我需要为每一行计算字段parent_id与表user_id中字段users匹配的行数。

我认为我拥有的SQL会完成这项工作,但它会将结果集展平为一行,这对我不起作用(我忘记了COUNTSUM都被压扁了结果集(已经有一段时间了,因为我已经用SQL做了什么,所以我不确定那个技术术语是什么,但我离题了......)) - 我需要每一行的总数({{1} })出现在定义的字段(user)中。

我需要使用什么SQL来实现这个结果?

编辑1

感谢我在第一条评论中收到的建议,我能够偶然发现以下返回正确结果集的SQL -

SubAccounts_Active

这返回了我期望的结果集,其中在SubAccounts_Active字段中设置了每个父帐户子项的计数。

2 个答案:

答案 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