Oracle SQL查询结果去重咨询(仅拥有SELECT权限)
去除SQL查询结果中的重复行
仅拥有SELECT权限,现有一张包含30万+行数据的表,查询时输出存在重复行,需要得到无重复的结果。
原始部分数据
| FIRST | SECOND | THIRD | FOURTH | FIFTH | SIXTH | SEVENTH |
|---|---|---|---|---|---|---|
| A | C | E | 250 | F | G | H |
| B | D | E | 250 | F | G | H |
| B | D | E | 250 | F | G | H |
| A | C | E | 250 | F | G | H |
| AB | QC | GG | 1000 | TT | SS | PP |
| CD | WD | GG | 1000 | TT | SS | PP |
| CD | WD | GG | 1000 | TT | SS | PP |
| AB | QC | GG | 1000 | TT | SS | PP |
期望的无重复结果
| FIRST | SECOND | THIRD | FOURTH | FIFTH | SIXTH | SEVENTH |
|---|---|---|---|---|---|---|
| A | C | E | 250 | F | G | H |
| B | D | E | 250 | F | G | H |
| AB | QC | GG | 1000 | TT | SS | PP |
| CD | WD | GG | 1000 | TT | SS | PP |
方法1:使用DISTINCT关键字
这是最直接的去重方式,在SELECT后添加DISTINCT,会自动过滤所有完全重复的行:
SELECT DISTINCT FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH, SEVENTH FROM your_table_name;
方法2:使用GROUP BY子句
将所有需要保留的列放入GROUP BY中,同样能实现去重,后续若需添加聚合统计(比如重复次数)会更灵活:
SELECT FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH, SEVENTH FROM your_table_name GROUP BY FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH, SEVENTH;
注意事项
- 两种方法均无需修改表结构,仅通过查询语句实现去重,完全适配仅拥有SELECT权限的场景。
- 针对30万+行的数据,两种方法性能差异不大,具体效果取决于数据库优化器和表的索引配置。
内容的提问来源于stack exchange,提问作者DataQuery
相关产品推荐
相关产品推荐

