-1
我使用MYSQL創建評分系統來實現我的數據庫。我想要做的是按照某個計算的百分比對每個屬性進行評分。下面是該示例數據庫:MySQL按百分比排名計算得分
| ID | VALUE1 | VALUE2|
-----------------------
| 2 | 5 | 20 |
| 4 | 5 | 30 |
| 1 | 3 | 5 |
| 3 | 2 | 8 |
這裏是理想的輸出我需要:
| ID | VALUE1 | RANK1 | Score1 | VALUE2 | RANK2 | Score2 |
---------------------------------------------------------
| 2 | 5 | 1 | 10 | 20 | 2| 8.3|
| 4 | 5 | 1 | 10 | 30 | 1| 10|
| 1 | 3 | 2 | 7.5| 5 | 4| 5|
| 3 | 2 | 3 | 5 | 8 | 3| 6.6|
的分數計算公式是
5+5*(MaxRank-rank)/(MaxRank-MinRank)
如何生成多個等級,如表?我曾嘗試
SELECT
@min_rank := 1 AS min_rank
, @max_rank1 := (SELECT COUNT(DISTINCT value1) FROM table) AS max_rank1
, @max_rank2 := (SELECT COUNT(DISTINCT value2) FROM table) AS max_rank2
;
SELECT
ID
, R1
, TRUNCATE(5.0+5.0 * (@max_rank1 - R1)/(@max_rank1 - @min_rank), 2) AS Score1
, R2
, TRUNCATE(5.0+5.0 * (@max_rank2 - R2)/(@max_rank2 - @min_rank), 2) AS Score2
FROM (
SELECT
ID
, value1
, FIND_IN_SET(`value1`, (SELECT GROUP_CONCAT(DISTINCT `value1` ORDER BY `value1` DESC) FROM table)) AS R1
, value2
, FIND_IN_SET(`value2`, (SELECT GROUP_CONCAT(DISTINCT `value2` ORDER BY `value2` DESC) FROM table)) AS R2
FROM table
) ranked_table;
它正常工作與排名低於170我的數據庫中有大約200多個排名的一些價值觀和排名,當它返回更大然後170將被視爲0。在這種情況下,排名> 170的分數將被錯誤計算。感謝你們。
感謝您的幫助,但它會生成錯誤:1052.字段列表中的列「VALUE1」不明確。我已將它們更改爲數據庫中的名稱,但無法使用。 – ToddShih 2013-04-23 15:43:41
有更多的玩法。這比我想象的要困難得多,我必須使用一些相關的子查詢,我試圖避免它們往往表現不佳。 – Kickstart 2013-04-23 16:20:11