关于distinct 的疑问?

来源:6-5 Oracle查询语句之给字段设置别名

慕圣0830664

2017-06-13 12:19

假如有这么一张表users,表中有id, username, salary三个字段,那么使用语句:select distinct username from users。只会显示不重复字段username的记录。那么问题来了,如果我想要显示所有的字段记录,并且过滤掉字段username中重复的记录,这时可以使用以下语句:select distinct username, id, salary from users; 那么,问题又来了,上面这语句有几个问题:

1、select distinct username 格式是固定死的,不能写成select id, distinct username;这就打乱了表中字段输出的顺序。

2、此语句需要列出所有字段,如果表中有几十个,几百个字段,也需要全部列出来么?

在mysql中可以用group by来进行分组,过滤掉指定字段的重复记录,并输出分组后的全部字段记录。语句可以这么写:

select * from users group by username.

在oracle中要达到同样的效果,该怎么办,求大神指导!!

写回答 关注

4回答

  • botao555
    2017-06-14 14:24:34
    已采纳

    暂时没有想到什么好办法,oracle中select的字段去除聚合函数中使用的,其他字段都要出现在group by中,这就有点坑了。。

  • 小杰子123
    2017-07-09 14:39:29

    distinct 表示去重,只要两行中的任何一个字段不一样就是不同的。

    问题1、select distinct username 格式是固定死的,,不能写成select id, distinct username;这就打乱了表中字段输出的顺序。

    答复:这个是书写规范,并不能将distinct位置随意放,它不是检查指定的字段是不是相同,而是检查要查询的字段的所有字段,两行中的任何一个字段不一样就是不同的。

    问题2、此语句需要列出所有字段,如果表中有几十个,几百个字段,也需要全部列出来么?

    你想查什么字段就查什么字段,包括SELECT Distinct  * FROM emp; 这样书写也是可以的。

    问题3.在mysql中可以用group by来进行分组,过滤掉指定字段的重复记录,并输出分组后的全部字段记录。语句可以这么写:select * from users group by username.

    这样是不太可取的,要注意:在统计查询中,select子句后只允许出现分组字段和统计函数,二其他任何字段都是不允许出现的。

    好的,希望能对你有帮助。谢谢!

  • qq_亘古疑云_0
    2017-06-29 15:15:29

    select * from users t where t.id in (select a.id from users a group by a.id having count(a.username)<2),看下这样符合你的要求不

    pusamm...

    查出来还是有重复的username 。

    2018-05-18 16:36:08

    共 1 条回复 >

  • 慕盖茨0528033
    2017-06-13 22:29:14

    暖一下回复,也是小白

Oracle数据库开发必备利器之SQL基础

为你带来Oracle开发必备的sql基础,为后续课程学习打下好的基础

160642 学习 · 641 问题

查看课程

相似问题