I am new to PostgreSQL. I am working on a taxi ride booking application.
I am trying to find why the (1) doesn't work. The hardcoded values are to be replaced by user inputs.
Non Working:
SELECT MAX(cr.pickup_point) AS pickup_point , MAX(cr.destination) AS destination, MAX(cr.leave_time) AS leave_time,MAX(cr.license) AS license , MAX(cr.username) AS username, MAX(cr.car_ride_id) AS car_ride_id , MAX(isd.no_of_seats) AS no_of_seats FROM car_ride cr , is_driver isd WHERE cr.username = isd.username AND cr.license = isd.license AND LOWER(TRIM(pickup_point))::varchar = LOWER(TRIM('Paya Lebar East, Paya Lebar'))::varchar AND (LOWER(TRIM(cr.destination))::varchar = LOWER(TRIM('Kranji, Sungei Kadut'))::varchar AND (cr.leave_time)> now()::timestamp(0) GROUP BY(cr.car_ride_id, isd.no_of_seats) HAVING isd.no_of_seats> ALL (SELECT COUNT(*) FROM bids b , car_ride cr2 WHERE b.driver_username = cr2.username AND b.successful IS TRUE AND b.leave_time >now()::timestamp(0) AND cr2.leave_time = b.leave_time AND cr.car_ride_id = cr2.car_ride_id)
2.Working:
SELECT MAX(cr.pickup_point) AS pickup_point , MAX(cr.destination)
AS destination , MAX(cr.leave_time) AS leave_time ,
MAX(cr.license) AS license , MAX(cr.username)
AS username, MAX(cr.car_ride_id) AS car_ride_id , MAX(isd.no_of_seats) AS no_of_seats
FROM car_ride cr , is_driver isd WHERE cr.username = isd.username
AND cr.license = isd.license AND
(cr.leave_time)> now()::timestamp(0) GROUP BY(cr.car_ride_id, isd.no_of_seats) HAVING
isd.no_of_seats>
ALL (SELECT COUNT(*) FROM bids b , car_ride cr2 WHERE
b.driver_username = cr2.username AND b.successful IS TRUE
AND b.leave_time >now()::timestamp(0) AND cr2.leave_time = b.leave_time
AND cr.car_ride_id = cr2.car_ride_id )
The difference between (1.)and (2.) is that the former intends to filter the results on the basis of pickup points and destinations.
While (2) displays all the car ride adverts that are in the future and not fully booked (number of bids= TRUE for a particular car_ride_id < car_capacity) for the car to not be fully booked.
Note that I have used the MAX aggregates so many times because I have used them as hidden fields in a subsequent form for making a bid.
Error message upon running the 1st query.
ERROR: syntax error at or near "GROUP"
LINE 10: GROUP BY(cr.car_ride_id, isd.no_of_seats)
You have one unnecessary bracket that you did not close, between
AND
andLOWER
:Fixed:
It is easier to avoid those mistakes when you format queries in a bit more readable style.