提问者:小点点

将select语句与其他表上的计数组合在一起


我有两个表:用户和教训。

当前,我使用以下方式选择所有用户:

SELECT * FROM users WHERE user_type = 1;

然后使用PHP对它们进行循环,并使用

SELECT COUNT(*) FROM lessons WHERE student_id=users.user_id;

我想把这个组合到一个查询中,我很确定这是可以通过连接实现的,但这超出了我的基本SQL知识。


共3个答案

匿名用户

在一个查询中完成所有这些操作。 如果要计算每个用户的计数:

select u.user_id, count(l.student_id)
from users u left join
     lessons l
     on u.user_id = l.student_id
where u.user_type = 1
group by u.user_id

匿名用户

您可以使用联接或相关子查询:

select 
    u.*,
    (select count(*) from lessons l where l.student_id = u.user_id) no_lessons
from users u

子查询解决方案的优点是它不需要在外部查询中进行聚合。 有了lessons(student_id)的索引,这应该是一个有效的选项。

匿名用户

您可以为此编写以下查询:

SELECT * FROM users u LEFT JOIN lessons l ON u.user_id=l.student_id WHERE u.user_type=1 GROUP BY u.user_id

这将根据两个表的id连接两个表(users和lessons),GROUP BY子句将对具有相同id的所有记录进行分组,因为您只需要每个用户的lessons数。