2011-05-12 79 views
0

我想計算MySQL表中一堆行的平均等級。問題是,根據您登錄的用戶的不同,可能會使用不同的比例。在MySQL中使用不同比例計算平均等級

例秤可以是:

  • 1-5
  • 1-10
  • AF(不包括E,顯然)

在數值尺度,較高數量是更好,但在字母範圍內越低越好。

我該如何讓SQL查詢給出正確的平均值?

例平均值:

  • 5,5,4,2 =
  • 8,10,7%,6,4 =
  • A,A,C =
  • A,F,B,B = ç
  • F,F,B,d = d

我使用的查詢是:

SELECT CHAR(ROUND(AVG(ORD(UPPER(grade))))) AS average 

這裏的問題是最後一個例子。這出來是E使用該查詢,但這不是一個有效的等級,它應該是D

我不知道如何處理這個。如果量表排除了數值(如A-F量表不包括E),那麼獲得平均成績的最佳方式是什麼?如果需要的話,我也可以用來計算它。

回答

1

不做一個看起來像意大利麪的SQL查詢,最好的方法是創建一個帶有成績 - >成績點值的映射表。

Table Values 
grade value 
    A | 4 
    B | 3 
    C | 2 
    etc. 

然後,你會做平均

SELECT ROUND(AVG(v.value)) FROM Grades g 
      INNER JOIN Values v on g.grade = v.grade 

,並從,你可以加入回到談判桌得到結果

SELECT * FROM (
    SELECT ROUND(AVG(grade)) avg FROM Grades g 
       INNER JOIN Values v on g.value = v.value 
      ) avgs 
INNER JOIN Values v2 on avgs.avg = v2.values 
+0

謝謝,這是一個好主意。 – 2011-05-12 16:59:43

1

使用字母和數值之間的映射創建另一個表格,針對它加入一次以獲取當前字母的值,然後再次加入它以將平均值轉換回字母。

+0

這一個好主意,謝謝。 – 2011-05-12 16:58:44