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.