首页 > 解决方案 > 如何通过在新表中包含 UID 列进行分组

问题描述

我正在尝试使用以下查询对一些数据进行分组,但我还需要在包含唯一值的 c_schema.worst_case 表中添加来自 a_import.veg 表的 uid 列。据我所知,我无法像往常一样添加它,因为 group by 无法正常工作,因为它需要新表中的所有唯一 ID ...有什么办法吗?

CREATE TABLE IF NOT EXISTS c_schema.worst_case
as SELECT back_str, ahead_str, substr(weather_case, 1, 4), min(min_dist) as min_dist
FROM a_import.veg
GROUP BY back_str, ahead_str, substr(weather_case, 1, 4)
ORDER BY back_str, ahead_str;

标签: sqlpostgresql

解决方案


我猜你想要distinct on

SELECT DISTINCT ON (back_str, ahead_str, substr(weather_case, 1, 4)) v.*
FROM a_import.veg v
ORDER BY back_str, ahead_str, substr(weather_case, 1, 4), min_dist;

(选择您实际需要的列。)

实际上,Postgres 现在支持LEFT(),因此您可以将其缩短为:

SELECT DISTINCT ON (back_str, ahead_str, LEFT(weather_case, 4)) v.*
FROM a_import.veg v
ORDER BY back_str, ahead_str, LEFT(weather_case, 4), min_dist;

推荐阅读