postgresql - postgresql 错误分组和聚合错误
问题描述
我有一个代码可用于我的表格按航班日期计算下载次数和每天的注册次数。它给出了这个错误
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)
解决方案
GROUP BY
s 有点棘手。由于您只对 COUNT 感兴趣,因此我会减少查询以删除您不会使用的所有参数。如果您考虑一下,如果您按航班日期分组,那么数据库应该为其他一些字段返回什么 - 例如 health_start_date?它不知道该怎么做,所以它会抛出一个错误。
从这个精简版开始。我不确定 WHERE 子句是否会引起麻烦。您可能需要 GROUP BY flight_date 别名而不是“public”.flight.flight_date。如果"public".flight.flight_date
是时间戳,您肯定必须对别名进行 GROUP BY。根据这些表的大小,执行 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"
推荐阅读
- angular - 我应该将 Angular 网站包装在颤振的应用程序容器中吗?
- mysql - 如何扩展视图之间的锁定/事务?
- crystal-reports - 禁止报表页脚水晶报表第一页的页眉
- python - 试图通过python3将csv文件导入postgresql数据库
- c# - 如何仅使用 XAML 更改资源模板元素的属性?
- postgresql - 使用 postgresql 驱动程序静态编译 Qt 时出错
- memory-management - Apache Ignite 与 Redis (jemalloc) 的内存分配?
- swift - Swift 函数重载 - 在传递 Any 对象时使用特定参数(代替 Any 参数)调用 func
- c++ - 带有 initializer_list 和 size 的 std::unordered_map 构造函数在 main 中编译,但不在类定义中
- python - 从熊猫数据框中添加所有行