【问题标题】:How to get distinct rows based on selected columns instead of all columns of a table in Oracle如何根据选定的列而不是Oracle中表的所有列获取不同的行
【发布时间】:2019-02-13 11:37:47
【问题描述】:

我正在尝试获取第一个不同的 3 列,而最后一列可以具有任何值。如果我在所有列上都不同,那么它会给我 8 行。该表是动态的,因此我需要不同的 3 列和最后一列中的任何值。

我有以下场景,

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     horse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 
John       Trav     John_road      donkie
Kaley      Couco    Couco_road      mouse
Charlie    Sheen    Sheen_road      goat
Johnny     Galecki  Galecki_road    pig

想要的结果:

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     mouse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 

我尝试了此链接上的解决方案,但它不起作用:

Oracle 11g SQL to get unique values in one column of a multi-column query

请在 Oracle 中提供帮助

【问题讨论】:

    标签: oracle


    【解决方案1】:

    由于您不关心最后一列的值,一个简单的选择是将其聚合为

    select name, surname, road, max(pet) 
    from your_table
    group by name, surname, road
    

    【讨论】:

      【解决方案2】:

      使用row_number()partition by 前三列:

      dbfiddle demo

      select * 
        from (
          select t.*, 
                 row_number() over (partition by Name, Surname, Road order by pet) rn 
            from t)
        where rn = 1
      

      【讨论】:

        【解决方案3】:

        你试过了吗

        SELECT NAME, SURNAME, rOAD, PET FROM 
        (
        SELECT NAME, SURNAME, rOAD, PET, ROW_NUMBER () OVER (PARTITION BY NAME, SURNAME, rOAD ORDER BY PET) RN FROM FROM TABLE_NAME
        ) WHERE RN=1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多