2012-11-28 28 views
0

我知道我可以使用Math.max(int, int)來返回兩個整數中最高的值,但可以說我有一個SQL表,包含名稱,某種排序/分數一個整數),我怎樣才能獲得這些分數,並獲得最高分數?或者,我怎樣才能從高到低排序,然後我可以照顧其餘的?從集合或列表中返回最高的int

+0

或者或者。 意思是說,或者一個工作,或者如果可能的話,兩者都有:) –

回答

4

你可以用簡單的MySQL查詢來做到這一點。

實施例:

SELECT * FROM table_name ORDER BY score DESC LIMIT 1; 

在第一行中將是最高的。

+1

或者你可以做'SELECT max(score)FROM table_name' – jahroy

+0

在數據庫中做這件事很好,而不是應用程序。 –

+0

然後你至少應該使用'LIMIT 1',這樣SQL數據庫可以更好地優化這個。 –

2

那麼,排序比找到最大值更昂貴。

可能最流行的代碼以找到最大的是:

int max = data[0]; 
for (int i = 1; i < data.length; i++) { 
    max = Math.max(max, data[i]); 
} 

有什麼不妥做這種方式。

排序工作,但排序在O(n log n),而這顯然只有O(n)

+0

取決於數據集的大小和數據庫的結構。如果rank列上有索引(這可能不是一個壞主意),那麼max result的檢索將花費'O(log(n))'時間。即使沒有索引,使用高度優化的數據庫引擎對較少量的數據進行排序也比將整個表格傳遞給Java並在那裏搜索更快。 –

+0

他的問題太模糊了,我不清楚他只對數據庫解決方案感興趣。當然,如果你有一個好的數據庫引擎,你應該使用'max'或'order by,limit 1'。但是這個問題本來是微不足道的...... –