【问题标题】:using an aggregate function to narrow my query使用聚合函数来缩小我的查询范围
【发布时间】:2009-08-27 11:51:23
【问题描述】:

我想做这样的事情:

SELECT locations.id, places.id, scannables.id, SUM(scannables.available)
FROM `scannables` 
INNER JOIN places ON scannables.place_id = places.id
INNER JOIN locations ON places.location_id = locations.id
WHERE locations.id = 2474 AND scannables.bookdate 
BETWEEN '2009-08-27' and date_add('2009-08-27', INTERVAL 3 DAY)

AND SUM(scannables.available) >= 3

GROUP BY scannables.place_id

这有效...除了“AND SUM(scannables.available) >= 3”

我不知道如何让它工作,

【问题讨论】:

    标签: sql mysql ruby-on-rails aggregate sum


    【解决方案1】:

    在 MySQL 中,我认为您不能对聚合的别名执行 WHERE。我认为您必须使用HAVING,它在执行查询后过滤结果。

    为什么使用 WHERE SUM(...) 不起作用?

    【讨论】:

    • 据我所知HAVING 是 SQL 标准的一部分,WHERE 不应该在兼容的实现中工作。
    【解决方案2】:

    好的,所以这似乎有效:

    SELECT locations.id, hostels.id, scannables.id, SUM(scannables.available)
    FROM `scannables` 
    INNER JOIN hostels ON scannables.hostel_id = hostels.id
    INNER JOIN locations ON hostels.location_id = locations.id
    
    WHERE locations.id = 2474 AND scannables.bookdate BETWEEN '2009-08-27' and date_add('2009-08-27', INTERVAL 3 DAY)
    
    GROUP BY scannables.hostel_id
    HAVING SUM(scannables.available) > 3
    

    跟随 GROUP 的 HAVING

    谢谢!

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2014-03-28
      • 1970-01-01
      相关资源
      最近更新 更多