简体   繁体   中英

how to subtract two column in mysql where clause?

I have a query where i want to subtract two column. Here is my query

SELECT 
    field_data_field_max_pax_allowed.`field_max_pax_allowed_value` AS m,
    field_data_field_bookable_item.`entity_id`,
    node.nid AS hotel_id, 
    field_data_field_rooms.`field_rooms_target_id` AS room, 
    field_data_field_quantity.`field_quantity_value` AS number_of_rooms,
    node.title,
    MAX(IFNULL(quan.`field_quantity_value`,0)) AS maxs,
    dr.`field_datetime_range_value`,
    dr.`field_datetime_range_value2`
FROM node node
LEFT JOIN field_data_field_rooms ON node.nid = field_data_field_rooms.entity_id 
INNER JOIN node n ON field_data_field_rooms.field_rooms_target_id = n.nid
LEFT JOIN field_data_field_max_pax_allowed ON field_data_field_rooms.`field_rooms_target_id` = field_data_field_max_pax_allowed.`entity_id`
LEFT JOIN field_data_field_quantity ON field_data_field_quantity.`entity_id` = field_data_field_rooms.`field_rooms_target_id`
LEFT JOIN field_data_field_bookable_item ON field_data_field_bookable_item.`field_bookable_item_target_id` = field_data_field_rooms.`field_rooms_target_id`
LEFT JOIN field_data_field_quantity quan ON field_data_field_bookable_item.`entity_id` = quan.`entity_id`
LEFT JOIN field_data_field_datetime_range dr ON field_data_field_bookable_item.`entity_id` = dr.`entity_id`
WHERE (node.type IN  ('hotel'))
    AND (DATE_FORMAT('2014-12-01', '%Y-%m-%d') BETWEEN DATE_FORMAT(dr.field_datetime_range_value, '%Y-%m-%d') AND DATE_FORMAT(dr.field_datetime_range_value2,'%Y-%m-%d')
        OR DATE_FORMAT('2014-12-31', '%Y-%m-%d') BETWEEN DATE_FORMAT(dr.field_datetime_range_value,'%Y-%m-%d') AND DATE_FORMAT(dr.field_datetime_range_value2,'%Y-%m-%d')
        OR DATE_FORMAT(dr.field_datetime_range_value, '%Y-%m-%d') BETWEEN DATE_FORMAT('2014-12-01', '%Y-%m-%d') AND DATE_FORMAT('2014-12-31', '%Y-%m-%d')
        OR DATE_FORMAT(dr.field_datetime_range_value2, '%Y-%m-%d') BETWEEN DATE_FORMAT('2014-12-31', '%Y-%m-%d') AND DATE_FORMAT('2014-12-01', '%Y-%m-%d')
        )
    AND (field_data_field_quantity.`field_quantity_value` - MAX(IFNULL(quan.`field_quantity_value`,0)) > 2)
GROUP BY field_data_field_rooms.`field_rooms_target_id`

This is showing Error Code: 1111 Invalid use of group function how can i solve it?

The WHERE clause is used to select rows to process. You can't aggregate functions like MAX() there, because that can't be calculated until after the rows are selected -- you have a chicken-and-egg problem.

You should put that in the HAVING clause, which is used to filter the resulting rows. So it should be:

...
WHERE (node.type IN  ('hotel'))
    AND (DATE_FORMAT('2014-12-01', '%Y-%m-%d') BETWEEN DATE_FORMAT(dr.field_datetime_range_value, '%Y-%m-%d') AND DATE_FORMAT(dr.field_datetime_range_value2,'%Y-%m-%d')
        OR DATE_FORMAT('2014-12-31', '%Y-%m-%d') BETWEEN DATE_FORMAT(dr.field_datetime_range_value,'%Y-%m-%d') AND DATE_FORMAT(dr.field_datetime_range_value2,'%Y-%m-%d')
        OR DATE_FORMAT(dr.field_datetime_range_value, '%Y-%m-%d') BETWEEN DATE_FORMAT('2014-12-01', '%Y-%m-%d') AND DATE_FORMAT('2014-12-31', '%Y-%m-%d')
        OR DATE_FORMAT(dr.field_datetime_range_value2, '%Y-%m-%d') BETWEEN DATE_FORMAT('2014-12-31', '%Y-%m-%d') AND DATE_FORMAT('2014-12-01', '%Y-%m-%d')
        )
GROUP BY field_data_field_rooms.`field_rooms_target_id`
HAVING (field_data_field_quantity.`field_quantity_value` - MAX(IFNULL(quan.`field_quantity_value`,0)) > 2)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM