我正在尝试在postgresql中创建一个查询,该查询根据列子集上的值消除重复行。 我们假设我的数据库如下:
name var1 var2 var3
a 1 2 10
a 1 2 26
b 3 56 47
c 4 78 50
出于我的目的,我想放弃第二行(或第一行,它并不重要),以便将表格作为:
name var1 var2 var3
a 1 2 10
b 3 56 47
c 4 78 50
我尝试了以下内容:
SELECT DISTINCT on (name, var1, var2)
FROM table;
但没有任何成功,任何人都可以帮忙吗?
由于
答案 0 :(得分:1)
您很接近,但您还需要指定要选择的内容,而不仅仅是要将唯一性应用于哪些列:
SELECT
DISTINCT ON (name, var1, var2)
name,
var1,
var2,
var3
FROM
table
-- ORDER BY name, var1, var2, var3 (ASC or DESC)
由于您不关心哪个记录保留,因此不需要ORDER BY
,但通常您需要指定选择正确行的顺序。
答案 1 :(得分:0)
如果您想要获取两个值的最大值,可以将min
替换为max
select name, var1, var2, min(var3) from your_table
group by name, var1, var2
答案 2 :(得分:0)
我想你想要这个:
SELECT DISTINCT ON (name, var1, var2) name, var1, var2, var3
FROM yourTable
ORDER BY
name, var1, var2, var3;
这里的关键是在Postgres中使用ORDER BY
时始终使用DISTINCT ON
子句。原因是ORDER BY
子句将用于确定哪个是应该从DISTINCT ON
操作中保留的“第一”记录。