mysql order by newid_order by newid() 随机查询
在日常作業中,有時候可能是一些活動要抽出得獎人或選出抽查的一些名單,就常常會使用到Order BY Newid() 的方式來做隨機數選出,但有可能的狀況需是要搭配到DISTINCT 來選出,這時候如DISTINCT 與Order By Newid()? 同時使用就會遇到錯誤訊息
「如果已指定SELECT DISTINCT,則ORDER BY 項目必須顯示于選取列表中」。以下這個范例,就分享一個最簡單的處理辦法。這邊范例的數據庫是使用章立民老師書中的范例中文北風數據庫,透過用中文的范例數據庫,讓大家可以比較親近一些,來了解這個范例的效果。
如果想在這群DISTINCT 數據中隨機數選初10筆,則你有可能會直接聯想到使用SELECT DISTINCT 員工編號,送貨城市FROM dbo.訂貨主檔Order by newid()? 當然因為DISTINCT 內在最篩選數據時,沒有newid() 則一定會發生「如果已指定SELECT DISTINCT,則ORDER BY 項目必須顯示于選取列表中」。
那有可能就會想說,把newid() 加進去SELECT 里面,這樣Order BY 就沒問題了,這樣使用的話,效果可能你會發現是跟全部SELECT一樣的效果。
所以說的那么多,解決的方法是什么呢?? 就是把DISTINCT(篩選)與Order By Newid() 隨機數排序分成兩個查詢,在組合在一起,
SELECT TOP 10? *? FROM — 仿真一個數據表(? SELECT DISTINCT 員工編號,送貨城市FROM dbo.訂貨主檔) AS 虛構出來的數據表Order by newid()
就透過先篩選的子查詢,在使用newid() 就能過將這樣的功能輕松的做出來
SQL Server:
Select TOP N * From TABLE Order By NewID()?? view plaincopy to clipboardprint? Select TOP N * From TABLE Order By NewID()
Select TOP N * From TABLE Order By NewID() NewID()函數將創建一個 uniqueidentifier 類型的唯一值。上面的語句實現效果是從Table中隨機讀取N條記錄。
Access:
Select TOP N * From TABLE Order By Rnd(ID)??? view plaincopy to clipboardprint? Select TOP N * From TABLE Order By Rnd(ID)
Select TOP N * From TABLE Order By Rnd(ID) Rnd(ID) 其中的ID是自動編號字段,可以利用其他任何數值來完成,比如用姓名字段(UserName)
Select TOP N * From TABLE Order BY Rnd(Len(UserName))?? view plaincopy to clipboardprint? Select TOP N * From TABLE Order BY Rnd(Len(UserName))
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
MySql:
Select * From TABLE Order By Rand() Limit 10?? view plaincopy to clipboardprint? Select * From TABLE Order By Rand() Limit 10
Select * From TABLE Order By Rand() Limit 10
postgreSQL:
select * from glxt022 order by random() limit 5?? view plaincopy to clipboardprint? select * from glxt022 order by random() limit 5
總結
以上是生活随笔為你收集整理的mysql order by newid_order by newid() 随机查询的全部內容,希望文章能夠幫你解決所遇到的問題。