我遇到与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 |
+--------+----------+----------+-------+-----------------------+
我不在乎选择哪条记录,订单不重要。 我只想选择只有一个组的所有列。
答案 0 :(得分:2)
通过应用group by
子句,您会获得其中所有列的唯一组合的结果行(在这种情况下,每个id
,col2
,{{的唯一组合1}}和col3
)。相反,您可以使用col4
窗口函数对每个row_number
的行进行编号,然后仅选择每个组中的(任意)第一个:
b_group