将select语句与另一个表上的计数结合起来

gkl3eglg  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(325)

我有两张table:用户和课程。
当前,我使用以下选项选择所有用户:

SELECT * FROM users WHERE user_type = 1;

然后使用php循环遍历它们,并使用

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

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

o7jaxewo

o7jaxewo1#

在一个查询中完成这一切。如果需要每个用户的计数:

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
jdgnovmf

jdgnovmf2#

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

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

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

u4dcyp6a

u4dcyp6a3#

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

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),groupby子句将对所有id相同的记录进行分组,因为您只需要每个用户的课数。

相关问题