【问题标题】:Get value from column A associated with the maximum value of the sum of 2 other columns从与其他 2 列之和的最大值关联的列 A 中获取值
【发布时间】:2021-03-24 16:24:27
【问题描述】:

这是一个 SQL 问题。 对不起标题,但我不知道如何写得更好。

我有 3 张桌子:房间、登记和结帐。 表房间有一个列 room_id。 表签入具有以下列:日期、预订 ID、房间 ID。 表结帐具有以下列:日期、预订 ID、房间 ID。

我只想获取睡眠时间最多的房间(其 ID)(如 SUM(checkout.date - checkin.date))。

我只知道如何获得它以及天数。 我怎样才能只得到一列(room_id)?

我的 2 列脚本是这样的:

SELECT r.room_id, SUM(c2.data - c1.data) FROM checkin c1
INNER JOIN checkout c2 ON c1.reservation_id = c2.reservation_id
INNER JOIN room r on r.room_id = c1.room_id
GROUP BY r.room_id
ORDER BY 2 DESC
FETCH FIRST ROW ONLY;

我想我需要一个子查询(至少),但是我在创建一个新列时遇到了麻烦。

【问题讨论】:

  • 我删除了不兼容的标签。请仅标记您正在使用的 DBMS。除非它是关于客户端的特定问题(您刚刚在客户端执行的查询的问题不是),否则不要标记客户端。

标签: sql


【解决方案1】:

只是不要在SELECT 中包含您不想要的信息:

SELECT ci.room_id
FROM checkin ci INNER JOIN
     checkout co
     ON ci.reservation_id = co.reservation_id
GROUP BY r.room_id
ORDER BY SUM(co.data - ci.data) DESC
FETCH FIRST ROW ONLY;

注意room_idcheckin 中,因此不需要room 表。

我想知道JOIN 是否应该包含两个列:

     ON ci.reservation_id = co.reservation_id AND
        ci.room_id = co.room_id

如果同一预订中的不同房间有不同的退房日期,则可能需要这样做 - 即使没有,出于性能原因可能也会有所帮助。

【讨论】:

  • 谢谢!我以为我必须有 SUM 列,但将它包含在 ORDER BY 中是 100% 有意义的。
猜你喜欢
  • 2015-04-30
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多