亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于distinct 的疑問?

假如有這么一張表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 回答

暫時沒有想到什么好辦法,oracle中select的字段去除聚合函數中使用的,其他字段都要出現在group by中,這就有點坑了。。

1 回復 有任何疑惑可以回復我~

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子句后只允許出現分組字段和統計函數,二其他任何字段都是不允許出現的。

好的,希望能對你有幫助。謝謝!

2 回復 有任何疑惑可以回復我~

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

0 回復 有任何疑惑可以回復我~
#1

pusamm花黎

查出來還是有重復的username 。
2018-05-18 回復 有任何疑惑可以回復我~

暖一下回復,也是小白

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Oracle數據庫開發必備利器之SQL基礎
  • 參與學習       160915    人
  • 解答問題       680    個

為你帶來Oracle開發必備的sql基礎,為后續課程學習打下好的基礎

進入課程

關于distinct 的疑問?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號