org.postgresql.util.PSQLException: ERROR: column "xxx.id" must appear in the GROUP BY clause or be used in an aggregate function
错误:列“XXXX.id”必须出现在GROUP BY子句中或在聚合函数中使用
在mysql中是正常使用的,在postgresql是不可以的。
具体SQL 脱敏后的示例:
SELECT ID, tenant_id, remarks, SOURCE, create_user, create_time, update_user, update_time, work_source, platform_no FROM work_base GROUP BY work_source
在标准 SQL 中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的非聚合列。
MySQL 扩展了 的使用,GROUP BY以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。前面的查询在 MySQL 中是合法的。
可以使用此功能通过避免不必要的列排序和分组来获得更好的性能。但是,这主要在每个未在 中命名的非聚合列中的所有值GROUP BY对于每个组都相同时很有用。服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。此外,从每个组中选择值不会受到添加ORDER BY子句的影响。结果集的排序发生在选择了值之后,并且ORDER BY不影响服务器选择每个组中的哪些值。
SQL92 及更早版本不允许查询的选择列表、HAVING 条件或 ORDER BY 列表引用未在 GROUP BY 子句中命名的非聚合列。
SQL99 及更高版本根据可选功能 T301 允许此类非聚合如果它们在功能上依赖于 GROUP BY 列。
在子查询中完成聚合,然后关联包含需要显示字段的表。
SELECT t.ID, t.tenant_id, t.remarks, t.SOURCE, t.create_user, t.create_time, t.update_user, t.update_time, t.work_source FROM ( SELECT work_source FROM work_base WHERE work_source IS NOT NULL GROUP BY work_base ) t LEFT JOIN work_base wb ON t.work_source= wb.work_source
上一篇:使用Nginx解决跨域问题