【问题标题】:MySql SUM ALIASMySql SUM 别名
【发布时间】:2013-06-08 17:19:46
【问题描述】:

我的 mysql 别名有问题。

我有这个问题:

SELECT (`number_of_rooms`) AS total, id_room_type, 
     COUNT( fk_room_type ) AS reservation , 
     SUM(number_of_rooms - reservation) AS result
FROM room_type
    LEFT JOIN room_type_reservation 
         ON id_room_type = fk_room_type
WHERE  result > 10
GROUP BY id_room_type

我的问题从SUMcannot recognize reservation 开始,然后我想将结果用于 where 条件。喜欢(where result > 10

【问题讨论】:

    标签: mysql sql sum alias


    【解决方案1】:

    要对聚合函数的结果应用谓词(过滤条件),请使用 Have 子句。 Where 子句表达式仅适用于在任何聚合之前创建的中间结果集。

     SELECT (`number_of_rooms`) AS total, id_room_type,
         COUNT( fk_room_type ) AS reservation , 
         SUM(number_of_rooms - reservation) AS result
     FROM room_type
         LEFT JOIN room_type_reservation 
             ON id_room_type = fk_room_type
     GROUP BY id_room_type
     Having SUM(number_of_rooms - reservation) > 10
    

    【讨论】:

    • 感谢您的回答,但 SUM(number_of_rooms - reservation) AS 结果返回我 #1054 - 'field list' 中的未知列 'reservation'
    【解决方案2】:

    不是 100%,但据我所知,您不能在声明中使用别名,这就是您遇到列问题的原因。试试这个:

     SELECT (`number_of_rooms`) AS total, id_room_type,
         COUNT( fk_room_type ) AS reservation , 
         SUM(number_of_rooms - COUNT( fk_room_type ) ) AS result
     FROM room_type
         LEFT JOIN room_type_reservation 
             ON id_room_type = fk_room_type
     GROUP BY id_room_type
     Having SUM(number_of_rooms - COUNT( fk_room_type ) ) > 10
    

    【讨论】:

    • 感谢您的回答,但我已经准备好这样做并返回给我 #1111 - 无效使用组函数
    • 让我们看看,再试一次,可能是包围问题。 SELECT ('number_of_rooms') AS total, id_room_type, COUNT( fk_room_type ) AS reservation , SUM(number_of_rooms) - COUNT( fk_room_type ) AS result FROM room_type LEFT JOIN room_type_reservation ON id_room_type = fk_room_type GROUP BY id_room_type Having SUM(number_of_rooms) - COUNT( fk_room_type ) > 10
    • 再次感谢,但结果不正确总 id_room_type 预订结果 20 10 201 3819 200 11 10 1990 10 22 100 900 22 25 0 22
    • 感谢您的宝贵时间,但我找到了嵌套选择 SELECT (number_of_rooms) 作为总计、id_room_type、c.reservation、SUM(number_of_rooms - c.reservation) 作为来自 room_type LEFT JOIN ( SELECT number_of_rooms AS moutsela, fk_room_type, COUNT( fk_room_type ) AS reservation FROM room_type LEFT JOIN room_type_reservation ON id_room_type = fk_room_type GROUP BY id_room_type )c ON id_room_type = fk_room_type GROUP BY id_room_type LIMIT 0 , 30 但我会尝试找到优化我的查询的方法
    • 这就是为什么我想设置你的表结构:)
    【解决方案3】:

    一种方法是将其包装到另一个 SELECT 中

    SELECT t.*, t.number_of_rooms - t.reservation AS result FROM
      (
        SELECT (`number_of_rooms`) AS total, id_room_type, 
         COUNT( fk_room_type ) AS reservation , 
         SUM(number_of_rooms - reservation) AS result
         FROM room_type
         LEFT JOIN room_type_reservation 
             ON id_room_type = fk_room_type
         WHERE  result > 10
         GROUP BY id_room_type
       ) t
    
    
    

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 2019-06-08
      • 2016-09-03
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多