几列不同

时间:2018-06-18 12:31:38

标签: sql postgresql

我正在尝试在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;

但没有任何成功,任何人都可以帮忙吗?

由于

3 个答案:

答案 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;

enter image description here

Demo

这里的关键是在Postgres中使用ORDER BY时始终使用DISTINCT ON子句。原因是ORDER BY子句将用于确定哪个是应该从DISTINCT ON操作中保留的“第一”记录。