【问题标题】:Postgres error [column must appear in the GROUP BY clause or be used in an aggregate function]Postgres 错误 [列必须出现在 GROUP BY 子句中或在聚合函数中使用]
【发布时间】:2020-06-11 01:01:18
【问题描述】:

我想查询 distinct 和 count:

SELECT DISTINCT way.vehicle, count(way.vehicle), way.id, way.created_at, way.updated_at, way.version 
from waypoints as way 
left join dtb_vehicle on way.vehicle = dtb_vehicle.vehicle  
where (6373 * acos (cos ( radians(21.0277644)) * cos ( radians (way.latitude)) * cos (radians (way.longitude) - radians (105.8341598)) + sin (radians (21.0277644)) * sin (radians (way.latitude)))) < 20 
AND dtb_vehicle.vehicle_type = 600 
GROUP BY way.vehicle 
HAVING count(way.vehicle) > 10

但它总是显示错误:列“way.id”必须出现在 GROUP BY 子句中或用于聚合函数中。

请帮助我。谢谢

【问题讨论】:

  • 然后按照错误提示进行操作(如果way.id是主键,那么你只需要按那个分组)。顺便说一句:distinctgroup by 几乎没有意义。由于group by,无论如何,每个vehicle 只能得到一行

标签: postgresql group-by count distinct aggregate-functions


【解决方案1】:

这只是您将遇到的四个错误中的第一个。 PostreSQL 一旦遇到错误就会停止检查你的 SQL,所以这并不意味着只有一个。事实上,所有 id、created_at、updated_at 和 version 都有相同的问题。正如错误告诉您是否正在使用GROUP BY,那么SELECT 语句中的所有列必须要么在GROUP BY 子句中,要么需要在它们上使用某种聚合函数。假设您不想将这些添加到GROUP BY(因为可能没有任何东西具有COUNT > 10),那么您要么必须将它们从SELECT 中删除,要么应用一些聚合函数。在您的情况下,MAX 可能是合适的,但如果不知道更多,我无法真正说出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2014-01-23
    • 2020-11-04
    • 2016-09-16
    • 2015-06-22
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多