2013-05-11 61 views
0

假設我有一張表: ID | KILLS | DEATHS $ratio = $kills/deaths;SQL命令按最高金額「殺死除以死亡」

如何訂購字段,以便我回復最高比例的ID?對不起,英語是我的第二語言,我不知道如何改寫它,所以它更有意義。

在此先感謝。

+3

你要什麼做的,如果人並列最高比例首位?青睞殺人數量最多還是死亡人數最少?如果具有最高比例的人具有相同的殺死和死亡數量呢? – pilcrow 2013-05-11 15:06:36

+0

收藏殺敵數最高的玩家。 – VladHQ 2013-05-12 07:40:55

回答

2

你有沒有嘗試這個辦法:

select id from table order by kills/deaths desc limit 1; 

嘗試(kills + 0.0)/deaths如果它不自動升級爲浮動。

也可以嘗試kills/(deaths+0.0001)防止由零鴻溝..

+0

我認爲這是它,讓我試試看。 – VladHQ 2013-05-11 13:46:51

+3

需要按照殺死/死亡限制1的順序排列最高比例。 – 2013-05-11 13:48:52

+0

還有一些考慮因素是什麼時候玩家有'死亡= 0'(不應該在列表頂部?) – 2013-05-11 13:52:46

6
WITH CTE AS 
(
    SELECT T.*, 
     Ratio = kills/deaths, 
     Rank = DENSE_RANK()OVER(PARTITION BY Id ORDER BY kills/deaths DESC) 
    FROM dbo.TableName T 
) 
SELECT * FROM CTE WHERE Rank = 1 
+2

我應該指定我正在使用MySQL。 – VladHQ 2013-05-11 13:47:07

+0

哇,這是一個可以在一個簡單的行中完成的東西的很多代碼(見BraveNewCurrency的答案)。有這麼多,這是一個非常糟糕的答案,沒有人應該遵循,所以我必須給你一個-1。 – Bohemian 2013-05-11 13:54:20

+3

@Bohemian這個答案是不同的,它給每個玩家提供最高的殺/死比率。 Tim在添加mysql標籤之前已經回答了。 – 2013-05-11 13:56:15

1

嘗試

SELECT TOP 1 ID, cast(Kills/Deaths as float) FROM KillsDeaths 
ORDER BY (Kills/Deaths) DESC 
+0

TOP不是mysql的方式。這是LIMIT,而且最後。 – Bohemian 2013-05-11 14:01:35

+0

啊..我的失敗 - 我沒有正確地閱讀這個問題。 – 2013-05-11 14:02:32