如何在MySQL中選擇一個隨機子集然後按另一列排序?

Linda Hamilton
發布: 2024-10-26 06:04:31
原創
679 人瀏覽過

 How to Select a Random Subset and Then Order by Another Column in MySQL?

MySQL 中的隨機選擇和排序

查詢 MySQL 資料庫時,通常希望隨機選擇記錄的子集。 ORDER BY RAND() 子句可用來實現此目的。但是,將此子句與其他排序子句組合時,考慮操作的順序非常重要。

嘗試選擇記錄的隨機子集,然後按另一列對結果集進行排序時,會出現一個常見的陷阱。以下查詢是一個範例:

SELECT * FROM users WHERE 1 ORDER BY RAND(), name ASC LIMIT 20
登入後複製

此查詢的目的是從 users 表中隨機選擇 20 個用戶,然後按名稱列升序對他們進行排序。但是,此查詢不會產生所需的結果。

原因是 ORDER BY RAND() 子句引入了非確定性排序。這意味著每次執行查詢時結果的順序都會改變。因此,後續的 name ASC 子句無法用於可靠地對結果進行排序。

為了正確地對結果進行排序,我們需要使用子查詢。以下查詢將隨機選擇 20 個用戶,然後按名稱列對他們進行排序:

SELECT * FROM 
(
    SELECT * FROM users ORDER BY RAND() LIMIT 20
) T1
ORDER BY name 
登入後複製

內部查詢隨機選擇 20 個用戶並將結果儲存在臨時表 T1 中。然後,外部查詢從 T1 中選擇所有行並按名稱對它們進行排序。

以上是如何在MySQL中選擇一個隨機子集然後按另一列排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!