代码之家  ›  专栏  ›  技术社区  ›  James Skidmore

如何使用MySQL子查询计算外部表中的行数?

  •  0
  • James Skidmore  · 技术社区  · 14 年前

    users reports . 每个用户都没有、一个或多个与之关联的报表,并且 报告 user_id 字段。

    我有以下查询,我需要在每行中添加一个用户拥有多少报告的计数:

    SELECT *
    FROM users
    LIMIT 1, 10
    

    我需要使用子查询吗?如果需要,如何有效地使用它?这个 报告

    2 回复  |  直到 14 年前
        1
  •  3
  •   Marc B    14 年前

    不需要子查询:

    SELECT users.user_id, COUNT(reports.user_id) AS number_of_reports
    FROM users
    LEFT JOIN reports ON users.userid = reports.userid
    GROUP BY users.user_id
    

    comment followup:COUNT函数不计算空值,因此对于任何根本没有报表的用户,它将返回0(如预期的那样)(join将为reports.user_id返回空值)。还一点一点地加了组,第一次就忘了。

        2
  •  0
  •   DRapp    14 年前
    SELECT users.userid,
           SUM( IF( Reports.userid > 0, 1, 0 )) as TotRpts
       FROM 
           users LEFT JOIN reports
              ON users.userid = reports.userid;
       GROUP BY
           users.userid
    

    您可能需要将IF()更改为

      IF( Reports.UserID is null, 0, 1 )