我有一個帶有id和值的表。 我怎樣才能按desc的值排序表中的一個元素? 我想要做的是:我如何使用SQL做排名
SELECT id FROM table ORDER BY value DESC
,我想它告訴我的id爲例位置= 4個
非常感謝回答!
我有一個帶有id和值的表。 我怎樣才能按desc的值排序表中的一個元素? 我想要做的是:我如何使用SQL做排名
SELECT id FROM table ORDER BY value DESC
,我想它告訴我的id爲例位置= 4個
非常感謝回答!
MySQL沒有分析功能,所以你必須使用user variables:
SELECT @r:[email protected]+1 AS rank, id
FROM table, (SELECT @r:=0) init
ORDER BY value DESC
爲了得到一個特定的記錄的等級,包裝在一個外部查詢:
SELECT rank FROM (
SELECT @r:[email protected]+1 AS rank, id
FROM table, (SELECT @r:=0) init
ORDER BY value DESC
) t WHERE id = 4
要保存MySQL從表中不必要地計算的排名記錄,你可以添加一個過濾器:
SELECT rank FROM (
SELECT @r:[email protected]+1 AS rank, table.id
FROM table,
(SELECT value FROM table WHERE id=4) t,
(SELECT @r:=0) init
WHERE table.value >= t.value
ORDER BY table.value DESC
) t WHERE id = 4
Eggyal的解決方案不是rank
,而是row_number
(這些實際上有意義,因爲它們是SQL標準的一部分)。
我認爲有以下做MySQL中的dense_rank
:
SELECT @r:[email protected]+1 AS rank, id
FROM (select id, count(*) as cnt
from table t
group by id
),
(SELECT @r:=0) init
ORDER BY value DESC
一個rank
是有點困難。 。 。我想下面的工作:
SELECT @r:[email protected]+1-offset AS rank, id
FROM (select id, count(*) as cnt
from table t
group by id
),
(SELECT @r:=0, count(*)-1 as offset
from table t
group by id
order by count(*) desc
limit 1
) init
ORDER BY value DESC
謝謝您的回答@eggyal,所以在PHP我應該做的: $測試= $ bdd->查詢(「SELECT @r:= @ R + 1秩,id FROM table,(SELECT @r:= 0)init ORDER BY value DESC'); $ tk = $ test-> fetch(); echo''。 $ tk [@r]。 ''; – woshitom
@ user1754181:是的,您可以這樣做(但由於別名,結果集中的列名將是「rank」,而不是「@ r」)。但是如果你不需要SQL中的rank值,你可以簡單地生成它,同時在PHP中循環結果集並節省你所有的大驚小怪。 – eggyal
我試過了,但它告訴我「使用未定義的常量等級 - 假定'等級'」 – woshitom