gpt4 book ai didi

mysql - 具有多个重复项的 SQL 表连接 - 返回日期范围内小于 X 的计数

转载 作者:行者123 更新时间:2023-11-29 01:56:44 24 4
gpt4 key购买 nike

我的头在旋转。在过去的两天里,我一直在努力想出一个连接两个表的 MySQL 查询。我遇到了一些并发症。

第一个表,我们称它为log,有一个已经“登录”的人的日志。每个条目都带有日期时间戳。它由 student_idtimestamp 组成。看起来像这样

  -------------------------------------
| student_id | timestamp |
| 1234 | 2014-02-26 21:50:27 |
| 2345 | 2014-02-26 21:54:54 |
| 1234 | 2014-03-03 19:18:18 |
| .....etc. |
-------------------------------------

我的第二张表,我们称它为students,其中包含每个学生的信息。

  --------------------------------------------------------
| student_id | name | homeroom |
| 1234 | Charles Reinmuth | Swatosh |
| 2345 | Kathryn Mo | Green |
| 6789 | Emily Salt | Clayborne |
| .....etc. |
--------------------------------------------------------

我想在特定的日期时间范围内返回日志中少于 X 个条目的学生。包括在该日期时间范围内没有条目的学生。我当前的查询运行良好。但只返回日志中条目 >0 的学生。我试过 LEFT OUTERRIGHT OUTER 但无济于事。这是我当前的查询:

SELECT students.name, students.homeroom, COUNT(1) AS cnt 
FROM students
INNER JOIN log ON log.student_id = students.student_id
WHERE log.`datetime` between '2014-02-25 00:00:00' and '2014-03-04 00:00:00'
GROUP BY log.student_id HAVING COUNT(1) < 3

在上面的示例中,这将返回:

  --------------------------------------------------
| Name | Homeroom | Count |
| Charles Reinmuth | Swatosh | 2 |
| Kathryn Mo | Green | 1 |
| .....etc. |
--------------------------------------------------

这就是我想要完成的:

  --------------------------------------------------
| Name | Homeroom | Count |
| Charles Reinmuth | Swatosh | 2 |
| Kathryn Mo | Green | 1 |
| Emily Salt | Clayborne | 0 |
| .....etc. |
--------------------------------------------------

最佳答案

要获取第二个表中没有匹配项的行,您需要使用LEFT JOIN

SELECT students.name, students.homeroom, COUNT(log.student_id) AS cnt 
FROM students
LEFT JOIN log
ON log.student_id = students.student_id
AND log.`datetime` between '2014-02-25 00:00:00' and '2014-03-04 00:00:00'
GROUP BY students.student_id
HAVING cnt < 3

注意我所做的其他更改:

  • COUNT(log.student_id) - 否则,您将计算 students 表中的行,即使没有 log 行. COUNT(column) 不计算 null 值,这是您在没有匹配项时得到的值。
  • log.datetime 测试必须移到 ON 子句中,因为对于 中没有行的学生,它将是 NULL >日志
  • 我更改了 HAVING 子句以使用 cnt 别名,以避免必须重复 COUNT(log.student_id)

关于mysql - 具有多个重复项的 SQL 表连接 - 返回日期范围内小于 X 的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26834932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com