mysql - MYSQL:根据另一个表的计数过滤掉?
问题描述
我有一个快速表格,我有一个每周活动,允许人们注册一个时间段,但是我想限制 3 人每周注册一个特定的时间段
我有 2 个表(如果算上用户/用户 ID 表,则为 3 个)
时隙:
+ id + slot + enabled +
+------+--------+-----------+
+ 1 + 12:00 + 1 +
+------+--------+-----------+
+ 2 + 12:03 + 1 +
+------+--------+-----------+
+ 3 + 12:06 + 1 +
+------+--------+-----------+
+ 4 + 12:09 + 0 +
+------+--------+-----------+
注册:
+ userid + date + timeslotid +
+----------+-------------+--------------+
+ 133 + 2020-12-01 + 2 +
+----------+-------------+--------------+
+ 167 + 2020-12-01 + 2 +
+----------+-------------+--------------+
+ 356 + 2020-12-01 + 2 +
+----------+-------------+--------------+
我想查看 2020 年 12 月 1 日没有 3 人注册的所有已启用时间段 ID 和可用时间段的列表
所以在上面的例子中,我希望看到
+ id + slot +
+------+--------+
+ 1 + 12:00 +
+------+--------+
+ 3 + 12:06 +
+------+--------+
如果你 10 年前让我这样做,我想我可以在 15 分钟内把它交还给我,但我完全是空白。
我已经开始了一个连接查询,它根据timeslots.id 和signups.timeslotid 连接两个表。试图弄清楚如何过滤 count(signups.timeslotid) < 3 和 date = 2020-12-01 的位置
解决了:
在 ImCrimson 的指导下,这似乎成功了。
SELECT t.id, t.slot FROM timeslots t LEFT JOIN (SELECT * FROM signup WHERE date = '2020-12-01') s ON (t.id = s.timeslotId) WHERE t.enabled = 1 GROUP BY t.id, t.slot HAVING (COUNT(*) < 3)
解决方案
我认为您正在寻找 HAVING 子句
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition]
推荐阅读
- google-apps-script - 为我从我拥有的模板创建的 Google 表格文件的副本禁用自动评论通知
- sql - 为移动平均定义窗口函数框架
- assembly - 重置字符串变量以在循环中打印多个用户输入(NASM 程序集)
- ruby-on-rails - 将模式标记属性添加到 Quill.js 内部 HTML
- operating-system - 按下电源按钮时硬件中断?
- python - 将文件中的数据添加到类字典中
- php - 数据表控制台错误 jQuery.Deferred 异常:无法设置属性“_DT_CellIndex”
- asp.net-core-mvc - 如何在 Visual Studio 2019 for mac 中搭建标识文件?
- javascript - 如何通过 Gulp 将 npm Halfmoon 的 JS 与现有代码捆绑在一起?
- powerbi - PowerBi:计算平均每日取消订单