Py学习  »  DATABASE

会议日程问题。如何将此代码转换为MySQL(或任何其他SQL)

Nikita Lis • 5 年前 • 1467 次点击  

问题是:

使用SQL查找所有可用房间所需的最小数量 会议将按时、无延误地举行。

这是会议日程安排。

    start   end
     8       9.15
    10      14
    13.2    15.2
    13.55   16.45
    14      17.45
    14.05   17.45

我在Python中找到了一种使用pandas的方法,但不知道如何在SQL中工作。我找到了一些解决方案,但这些都是模拟的,我认为有一个更优雅的方法来解决这个问题。

下面是Python代码:

number_of_rooms = []
for i in range(len(data)):
    rooms = 1
    for j in range(len(data)):
        if data['start'][i]<data['end'][j] and data['start'][i]>data['start'][j]:
            rooms = rooms + 1
        number_of_rooms.append(rooms)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51713
 
1467 次点击  
文章 [ 1 ]  |  最新文章 5 年前
GMB
Reply   •   1 楼
GMB    6 年前

下面是SQL查询中逻辑的转换:

SELECT i.start, i.end, COUNT(*) number_of_rooms
FROM rooms i
LEFT JOIN rooms j ON i.start < j.end AND i.start  > j.start
GROUP BY i.start, i.end 

查询处理表中的每个记录(别名 i ). self join在同一个表中拉入所有记录( j )满足时间间隔重叠条件的。然后 GROUP BY 子句聚合每个记录的数据 ,和 COUNT() 提供中匹配记录的数目 j型 .