首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中统计来自两个不同表的记录

如何在MySQL中统计来自两个不同表的记录
EN

Stack Overflow用户
提问于 2019-04-15 20:58:16
回答 2查看 53关注 0票数 0

我有两个表:学生表和支付表。缴费表存储学生缴费记录。如何计算选定时段内未缴交学费的学生总人数?示例session: 2017/2018

我使用了下面的代码,我花了超过10秒的时间来给出结果。

代码语言:javascript
复制
SELECT   Count(students.registrationno)
FROM     students
WHERE    registrationno NOT IN
         (
          SELECT   DISTINCT payments.reg_no
          FROM payments
          WHERE payments.`session`='2017/2018'
         )
代码语言:javascript
复制
students
+----------------+------------+--------------+
| registrationno |   surname  |     firstname|
|----------------+------------+--------------|
| 100009         |   OGBODO   |     IPU      |
| 100014         |   IKE      |     JOSEPH   |
| 100033         |   JOHN     |     AJENE    |
+----------------+------------+--------------+

payments

+-------------+---------+-----------+ 
| payment_id  |  reg_no |   session |
|-------------+---------+-----------+
| 1           |  100009 | 2017/2018 |
| 2           |  180689 | 2017/2018 |
| 3           |  180680 | 2017/2018 |
+-------------+---------+-----------+
代码语言:javascript
复制
SELECT  COUNT(students.registrationno)
FROM    students
WHERE   registrationno NOT IN 
       (
        SELECT   DISTINCT payments.reg_no
        FROM     payments
        WHERE    payments.`session`='2017/2018'
       )

我希望输出不到10秒

EN

回答 2

Stack Overflow用户

发布于 2019-04-15 21:13:28

使用连接

代码语言:javascript
复制
SELECT count(*) FROM students st
LEFT JOIN 
(SELECT * FROM payments WHERE session='2017/2018') pmt 
ON st.registrationno = pmt.reg_no WHERE pmt.reg_no IS NULL;

条件pmt.reg_no is null确保查询将返回相应会话中没有付款条目的学生记录。

还要创建适当的索引(例如,students.registrationno)实现了显著的性能提升。

票数 0
EN

Stack Overflow用户

发布于 2019-04-15 21:17:15

正如评论中提到的,添加indexes可以帮助您提高性能。

下面是你可以尝试的另一种方法,但我相信它的效率会低于NOT IN

代码语言:javascript
复制
SELECT  count(s.registrationno)
FROM    students s
LEFT JOIN
        payments p
ON      p.reg_no  = s.registrationno
WHERE   p.reg_no IS NULL
AND P.session='2017/2018'

您也可以尝试使用NOT EXISTS

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55689723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档