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

时间:2019-02-16 23:51:48

标签: python mysql sql pandas

问题是:

  

使用SQL查找所有房间所需的最小可用房间数   会议将毫不拖延地按时举行。

这是会议的时间表。

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

我找到了一种使用pandas在Python中完成此操作的方法,但不确定如何使其在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)

1 个答案:

答案 0 :(得分:1)

这是您在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)。自联接将拉入同一表(j)中满足时间间隔重叠条件的所有记录。然后GROUP BY子句汇总i的每个记录的数据,而COUNT()为您提供j中匹配记录的数量。