Sql 如何对Oracle数据库中的行进行分组?
我有下表Sql 如何对Oracle数据库中的行进行分组?,sql,oracle,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 | 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-10列(我排除在外)对于第1列中的值相同的所有行都是完全相同的
我在OracleDB中尝试了大量不同的查询,但似乎没有任何效果
我试过:
SELECT Column1, Column2 FROM table GROUP BY Column1
但正如中所解释的,这不是GROUPBY子句在Oracle中的工作方式
我也尝试过选择DISTINCT
,但这也不起作用
我该怎么做呢?主要的问题是,这里的组的行为方式与我熟悉的MySQL中的不同。如果您不关心哪个,只需使用
MAX()
或MIN()
:
您必须使用聚合函数:
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
如果x输出不重要
select
Column1,
rtrim (xmlagg (xmlelement (e, Column2 || ' | ')).extract ('//text()'), ' | ') Column2
from
[table_name]
group by
Column1
;
您是否尝试过从表组中按列1选择列1,min(列2)?您不能发布问题,然后获得答案,然后接受答案,然后自行声明“折旧”。您可以将其标记为版主删除。但过去,这个网站不是聊天室或BBS。它是其他人的资源。现在可能有一些人会误解,但保持现状是有长期价值的,这样其他人就可以学习;你怎么知道我在编辑它???@DevarshDesai,因为当你编辑一个问题时,它会在问题列表中显示为“更新的”,以捕捉你正在做的事情。@JakeGould,啊,我明白了,kk谢谢-学到的一课我对Oracle不太熟悉。。。但是,我认为
listag()
的工作方式与MySQL的group_concat()
类似,对吗?是的,语法不同,但功能相同。但是,在Oracle中,不能将DISTINCT与LISTAGG一起使用,而在MySQL中,可以将DISTINCT与group_concat一起使用
select
Column1,
rtrim (xmlagg (xmlelement (e, Column2 || ' | ')).extract ('//text()'), ' | ') Column2
from
[table_name]
group by
Column1
;