如何在Oracle DB中对行进行分组?

时间:2014-08-25 01:45:39

标签: sql oracle

我有下表

___________________
Column 1 | Column 2
-------------------
    30   |     1
    30   |     2
    30   |     3
    31   |     1
    31   |     2
    31   |     3
    32   |     1
    32   |     2
    32   |     3
    ...

我希望结果集为

   ___________________
   Column 1 | Column 2
   -------------------
       30   |     x (doesn't matter which one)
       31   |     x (doesn't matter which one)
       32   |     x (doesn't matter which one)

第2列并不重要的原因是第3列(我排除了)对于第1列中的值相同的所有行完全相同。

我在Oracle数据库中尝试了大量不同的查询,但似乎没有任何工作。

我试过了:

 SELECT Column1, Column2 FROM table GROUP BY Column1

但如here中所述,那不是GROUP BY子句在Oracle中的工作方式。

我也试过SELECT DISTINCT,但这也没有用。

我应该怎么做呢?主要的问题是GROUP BY在这方面的行为与我熟悉的MySQL不同。

3 个答案:

答案 0 :(得分:2)

如果您不在乎哪个,请使用MAX()MIN()

SELECT Column1, MIN(Column2)
FROM table
GROUP BY Column1;

答案 1 :(得分:1)

您必须使用聚合函数:

SELECT Column1, max(Column2) FROM table GROUP BY Column1

以上返回最高(你也可以使用min或avg或任何其他agg功能)

或者您可以使用LISTAGG显示所有值:

SELECT Column1,
       listagg(Column2, ', ') within group(order by column2) as col2vals
  FROM table
 GROUP BY Column1

答案 2 :(得分:0)

如果x输出不重要

select 
   Column1,
   rtrim (xmlagg (xmlelement (e, Column2 || ' | ')).extract ('//text()'), ' | ') Column2
from 
   [table_name]
group by 
   Column1
;