代码之家  ›  专栏  ›  技术社区  ›  Marco De Virgilis

在多个列上不同

  •  0
  • Marco De Virgilis  · 技术社区  · 8 年前

    我正试图在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 回复  |  直到 8 年前
        1
  •  1
  •   Kamil Gosciminski    8 年前

    您已关闭,但还需要指定要选择的内容,不仅要指定要对哪些列应用唯一性:

    SELECT 
      DISTINCT ON (name, var1, var2)
      name,
      var1,
      var2,
      var3
    FROM
      table
    -- ORDER BY name, var1, var2, var3 (ASC or DESC)
    

    ORDER BY

        2
  •  0
  •   tourist    8 年前

    min max

    select name, var1, var2, min(var3) from your_table
    group by name, var1, var2
    
        3
  •  0
  •   Tim Biegeleisen    8 年前
    select distinct on(name,var1,var2)name,var1,var2,var3
    排序依据
    
    
    
    
    

    enter image description here

    Demo

    ORDER BY使用时的子句DISTINCT ON排序依据操作。