Ошибка postgresql сгруппировать и объединить ошибку - PullRequest
0 голосов
/ 23 мая 2018

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

SELECT  "public".aircraft.aircraft_id, COUNT(*) AS TOTALDOWNLOAD, "public".aircraft.register_number, to_char("public".flight.flight_date, 'DDMMYYYY') as flight_date , to_char("public".flight.health_start_date, 'hh24:mi') as health_start_date, to_char("public".flight.health_end_date, 'hh24:mi') as health_end_date,  "public".flight.maintenance_flight_time 
FROM  "public".flight  

INNER JOIN   "public".aircraft
ON
"public".flight.aircraft_id = "public".aircraft.id
WHERE "public".flight.maintenance_flight_time > 0 
Group by "public".flight.flight_date, "public".aircraft.register_number

подробности ошибки ниже:

ERROR [42803] ERROR: column "aircraft.aircraft_id" must appear in the GROUP BY clause or be used in an aggregate function;
Error while executing the query (PSQLODBC35W.DLL)

1 Ответ

0 голосов
/ 23 мая 2018

GROUP BY s довольно сложно.Поскольку вас интересует только COUNT, я бы сократил запрос, чтобы избавиться от всех параметров, которые вы не собираетесь использовать.И если вы подумаете об этом, если вы группируете по flight_date, что БД должна возвращать для некоторых других полей - например, health_start_date?Он не знает, что делать, поэтому выдает ошибку.

Начните с этой урезанной версии.Я не уверен, если предложение WHERE вызовет проблемы или нет.Возможно, вам придется использовать псевдоним GROUP BY flight_date вместо «public» .flight.flight_date.И вам определенно придется указывать псевдоним GROUP BY, если "public".flight.flight_date является меткой времени.В зависимости от размера этих таблиц преобразование to_char может быть медленным.Использование date("public".flight.flight_date может быть быстрее.

SELECT to_char("public".flight.flight_date, 'DDMMYY') as "flight date",
       COUNT(*) AS TOTALDOWNLOAD, "public".aircraft.register_number
FROM  "public".flight  
INNER JOIN  "public".aircraft ON
            "public".flight.aircraft_id = "public".aircraft.id
WHERE "public".flight.maintenance_flight_time > 0 
GROUP BY "flight date", "public".aircraft.register_number
ORDER BY "flight date"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...