找出 MySQL 表中前 N 個最高值
在資料分析和報表中,經常需要根據特定欄位的最高值。然而,當多個記錄在第 N 個位置附近共享相同的最大值時,可能會出現歧義。
問題:
使用SQL 選擇具有最高值的前N 行時對於特定列的值,查詢應該只傳回前N 行還是包含具有相同最大值的其他行?
答案:
答案取決於是否您想要包含或排除重複的最高值。以下是兩種方法:
方法1:排除重複的頂部值
要只擷取沒有重複項的前N 行,請使用下列查詢:
SELECT * FROM t ORDER BY value DESC LIMIT N
在此查詢中,LIMIT N 子句將結果集限制為前N 行,排除第N 行以下具有相同最大值的任何行。
方法2:包含重複的頂部值
要擷取所有具有最高值的行(無論是否重複),請使用下列查詢:
SELECT * FROM t JOIN (SELECT min(value) AS cutoff FROM (SELECT value FROM t ORDER BY value LIMIT N ) tlim ) tlim ON t.value >= tlim.cutoff;
此查詢使用子查詢來決定具有以下值的行的截止值:第N 個最高值。然後,它使用 ON 子句將此子查詢與主表連接起來,以過濾值大於或等於截止值的行。
其他注意事項:
以上是前 N 個 SQL 查詢是否應該包含重複的最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!