繁体   English   中英

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

[英]How do I use a MySQL subquery to count the number of rows in a foreign table?

我有两个表, usersreports 每个用户都没有关联的一个,一个或多个报告,并且reports表具有一个user_id字段。

我有以下查询,我需要在每行中添加用户拥有的报告数量:

SELECT *
FROM users
LIMIT 1, 10

我需要使用子查询吗?如果需要,如何有效地使用它? reports表有成千上万的行。

不需要子查询:

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

为了使查询更有效,请确保两个表中的user_id字段都有索引

注释跟进:COUNT函数不计算空值,因此对于所有根本没有报告的用户,它将返回0(按预期)(联接将为report.user_id返回NULL)。 还添加了GROUP BY位,忘记了第一次。

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 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM