SQL检查列中的值大于行数

时间:2019-10-19 15:33:30

标签: mysql sql django

我正在构建一个Web应用程序,客户可以在该应用程序上预订企业(供应商)的服务。但第一个供应商需要添加 他提供什么服务,他可以在哪里提供这些服务,以及从哪个时间(开始时间)到哪个时间(结束时间)有多少用户可用

所以我感到困惑的是,假设某个客户在某个特定时间预订服务,而当另一个客户从该供应商预订服务时,我们需要计算的是可用用户数 在此时间段内的数量大于该特定时间内已经预订(尚未完成)的数量

我有这三个表

@Singleton
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

请帮助我进行查询

我可以得到其no_of_users大于count(books)的所有供应商,其中booking_datetime> = date_start_time和booking_datetime

如果我可以通过一个查询获得这些结果,或者使用多个查询还是应该更改数据库结构,则任何建议都会受到赞赏

我想要的输出只是在该时间段内可用的user_id,并且该用户的数量大于该时间段内已预订的数量

1 个答案:

答案 0 :(得分:1)

这是您想要的吗?

       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)