首页 > 解决方案 > 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 ,其在该时间段内可用,并且其用户数量大于该时间段的预订数量

标签: mysqlsqldjango

解决方案


这是你想要的吗?

       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)

推荐阅读