首頁  >  文章  >  資料庫  >  如何在MySQL中選擇一個隨機子集然後按另一列排序?

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

Linda Hamilton
Linda Hamilton原創
2024-10-26 06:04:31680瀏覽

 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn