Oracle组只有一列 - 更新

时间:2017-05-29 19:10:24

标签: sql oracle select group-by

我遇到与this类似的情况。 我有多个列有不同类型的数据,我想选择所有列,但分组只有一列。

我的表:

+--------+----------+----------+-------+-----------------------+
| id     | b_group  | col2     | col3  |       col4            |
+--------+----------+----------+-------+-----------------------+
| 1      | 1        | abcd     | 100   | www.google.com        |
| 2      | 1        | xyz      | 200   | www.yahoo.com         |
| 3      | 2        | dfs      | 200   | www.stackoverflow.com |
| 4      | 3        | asda3    | 78    | www.imdb.com          |
| 5      | 4        | zsdvf4   | 65    | www.youtube.com       |
| 6      | 5        | sdf4     | 101   | www.ymail.com         |
| 7      | 5        | ssdfsd   | 200   | www.gmail.com         |
| 8      | 1        | zxcgdf4  | 200   | www.club.com          |
| 9      | 6        | yujhgj   | 202   | www.thunderbird.com   |
+--------+----------+----------+-------+-----------------------+

在阅读了there提供的解决方案之后,我理解的是使用聚合函数,所以我的查询就像:

select MIN(b_group),id,col2,col3,col4 from myTable where col3='200' group by id,col2,col3,col4;

但是这不适用于我的情况,它提供col3 = 200的所有记录。

我想要的输出:

+--------+----------+----------+-------+-----------------------+
| id     | b_group  | col2     | col3  |       col4            |
+--------+----------+----------+-------+-----------------------+
| 2      | 1        | xyz      | 200   | www.yahoo.com         |
| 3      | 2        | dfs      | 200   | www.stackoverflow.com |
| 6      | 5        | sdf4     | 200   | www.ymail.com         |
+--------+----------+----------+-------+-----------------------+

我不在乎选择哪条记录,订单不重要。 我只想选择只有一个组的所有列。

1 个答案:

答案 0 :(得分:2)

通过应用group by子句,您会获得其中所有列的唯一组合的结果行(在这种情况下,每个idcol2,{{的唯一组合1}}和col3)。相反,您可以使用col4窗口函数对每个row_number的行进行编号,然后仅选择每个组中的(任意)第一个:

b_group