我有下表
___________________
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不同。
答案 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
;