Как исправить недостающие скобки в SQL - PullRequest
0 голосов
/ 15 июня 2019

При решении этой проблемы я получаю правильную скобку: Укажите имя водителя, возраст, должность, средний рейтинг поездки за данный месяц: апрель

это то, что я пробовал в моем sql.

CREATE TABLE driver (
    driverID NUMBER(4) PRIMARY KEY, 
    Dname VARCHAR2(20),
    DNRIC CHAR(14),
    Dgender CHAR(1),
    DDOB DATE,
    Dmobile CHAR(11),
    DcarNo CHAR(6),
    Dstart DATE,
    Dstop DATE,
    Dgrade CHAR(6),
    DLicence CHAR(4)
 );


CREATE TABLE booking (
    BookID NUMBER(4) PRIMARY KEY,
    PID NUMBER(4),
    driverID NUMBER(4),    
       PickLoc VARCHAR2(13),
       DropLoc VARCHAR2(13),
       TDate DATE,
       TTime NUMBER(4),
       RideFare CHAR(6),
       TollOther CHAR(6),
    cancelDate DATE,
       TripRating NUMBER(1), 
    PayMethod CHAR(15),
 FOREIGN KEY (PID) references passenger (PID),
 FOREIGN KEY (driverID) references driver (driverID)
 );



 SELECT Dname as driver, 
 floor(months_between(sysdate,driver.DDOB)/12) as age,
 Dgrade as position,
 rating
 FROM driver
 LEFT JOIN 
 (SELECT driverID, avg(TripRating) as rating
 FROM booking group by driverID
 where (TDate between '01-Apr-2019' and '30-Apr-2019')
 order by rating) 
 booking on driver.driverID = booking.bookingID

отсутствует правая скобка. Кроме того, хотелось бы получить средний рейтинг водителя за апрель

1 Ответ

0 голосов
/ 15 июня 2019

Oracle не позволяет использовать предложение order by в таком подзапросе (так как в любом случае это было бы бессмысленно) и выдает довольно раздражающую нелогичную ошибку ORA-00907 при попытке.Перемещение предложения order by должно помочь.Также обратите внимание, что предложение where должно предшествовать предложению group by, а не после него:

SELECT     dname AS driver, 
           FLOOR(MONTHS_BETWEEN(SYSDATE, driver.ddob) / 12) AS age,
           dgrade AS position,
           rating
FROM       driver
LEFT JOIN (SELECT   driverid,
                    AVG(triprating) AS rating
           FROM     booking
           WHERE    tdate BETWEEN '01-Apr-2019' AND '30-Apr-2019'
           GROUP BY driverid) booking ON driver.driverid = booking.driverid
ORDER BY  rating -- Moved here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...