【问题标题】:MySQL: How to get the max of a sum column?MySQL:如何获得总和列的最大值?
【发布时间】:2013-05-05 19:29:35
【问题描述】:

所以我有以下查询..

select rooms.id room_id, rooms.cnt, booked_dates.cnt, sum(booked_dates.cnt) 
from rooms 
LEFT JOIN booked_dates 
       on rooms.id = booked_dates.rid and 
          (booked_dates.start between '2013-05-06' and '2013-05-09')
where rooms.ht = 4 and rooms.id = 138 
group by booked_dates.start

返回以下结果..

现在我需要按room_id 对结果进行分组,并在sum(booked_dates.cnt) 列中获取max 数字。因此,对于示例,它将是:

138 | 20 | 4 | 12

我该怎么做?谢谢。

【问题讨论】:

  • 我在该列列表中看到许多非聚合字段...您确定这就是您的意思吗?也许我只是不明白那些cnt 列代表什么。

标签: mysql group-by sum max


【解决方案1】:
SELECT  rooms.id room_id, rooms.cnt, booked_dates.cnt, SUM(booked_dates.cnt) AS booked_sum
FROM    rooms 
LEFT JOIN
        booked_dates 
ON      rooms.id = booked_dates.rid
        AND (booked_dates.start between '2013-05-06' and '2013-05-09')
WHERE   rooms.ht = 4
        AND rooms.id = 138 
GROUP BY
        booked_dates.start
ORDER BY
        booked_sum DESC
LIMIT   1

【讨论】:

    【解决方案2】:

    添加一个 max() 列:

    select
        rooms.id room_id,
        rooms.cnt,
        booked_dates.cnt, 
        max(booked_dates.cnt) as max ,
        sum(booked_dates.cnt) as sum
    from rooms 
    LEFT JOIN booked_dates 
       on rooms.id = booked_dates.rid and 
          (booked_dates.start between '2013-05-06' and '2013-05-09')
    where rooms.ht = 4 and rooms.id = 138 
    group by 1, 2, 3
    

    您的 group by 子句中存在错误 - 此查询也修复了该问题(请注意,您可以在 group by 子句中通过列的位置而不是表达式来引用列)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2012-09-09
      • 2019-03-16
      • 2020-08-12
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多