mysql - sql检查列中的值是否大于行数
问题描述
我正在构建一个网络应用程序,客户可以在其中从企业(供应商)预订服务。但是第一个供应商需要添加他提供的服务,他能够在哪里提供这些服务,以及从哪个时间(开始时间)到哪个时间(结束时间)有多少用户可用
所以我很困惑假设客户在某个特定时间预订服务,而当另一个客户从该供应商预订服务时,我们需要计算的是该时间段内可用的用户数量大于已预订的数量(不是尚未完成)在那个特定的时间
我有这三张桌子
users = (for both customer & vendors)
id | name | address | role_id
1 | Customer | some address | 1
2 | Vendor | Some Address | 2
3 | Another Customer | Some address | 1
4 | Another Vendor | address | 2
vendor_available_time = (only for vendor)
id | date_start_time | date_end_time | no_of_users |vendor_id
1 | 2019-10-16 00:00:00 | 2019-19-16 23:59:59 | 3 | 2
1 | 2019-10-16 09:00:00 | 2019-19-16 17:00:00 | 1 | 4
1 | 2019-10-17 00:00:00 | 2019-19-17 23:59:59 | 3 | 2
1 | 2019-10-17 09:00:00 | 2019-19-17 17:00:00 | 2 | 4
bookings = (for both)
id | booking_status | booking_datetime | customer_id | vendor_id
1 | job started | 2019-10-16 10:00:00 | 1 | 2
1 | completed | 2019-10-15 10:00:00 | 1 | 2
1 | accepted | 2019-10-16 09:00:00 | 3 | 2
1 | work in progress | 2019-10-16 09:00:00 | 3 | 2
请帮我查询
我可以在哪里获得 no_of_users 大于 count(bookings) 的所有供应商,其中 booking_datetime >= date_start_time 和 booking_datetime < date_end_time 和 booking_status 不在 ['完成','拒绝','取消']
任何建议都将不胜感激,我可以从一个查询中获得这些结果,我应该使用多个查询还是应该更改我的数据库结构
我想要的输出只是一个 user_ids ,其在该时间段内可用,并且其用户数量大于该时间段的预订数量
解决方案
这是你想要的吗?
Select b.vendor_id from
bookings b join vendor_available_time v on b.vendor_id=v.id
where b.booking_datetime >= v.date_start_time and
b.booking_datetime < v.date_end_time
and b.booking_status not in ['completed', 'rejected', 'cancelled']
group by b.vendor_id having count(distinct b.id) <=count(b.customer_id)