2013-07-30 88 views
0

table1的MySQL的SELECT語句來計算排名

id q1 q2 q3 q4 q5 q6 
1 100 100 100 100 100 100 
2 100 100 100 100 100 100 
3 100 100 100 100 100 100 
4 100 100 100 100 100 100 

我有7個字段和4行數據的如上述 「表1」 一個MySQL表。每個q1 - q6都有一個數值,例如100,以便讓我們很容易理解我們的方程是否有效。

我想做的事情在我的MySQL查詢以下得到下面的結果(我已經打破它變成2個步驟,使其更容易理解,但我必須這樣做在一個MySQL查詢):

1 )。 SELECT q1 +((q1 + q2 + q3 + q4 + q5 + q6)/ 6)AS排名

對於每個數據庫行AS排名,應返回200的值(基於每個項目的100行)

2)。 Q1 +(Q1 + Q2 + Q3 + Q4 + Q5 + Q6)/ 6)/ SUM(排名)

OR

排名/ SUM(排名)

所以應返回的200的值對於每一行:200/SUM(排名)

這應該等於0.25(八百分之二百= 0.25)(排名/ SUM(排名))

我現在有下面的MySQL查詢沒有返回正確的如上所示的值:

SELECT *, 
    (q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) AS ranking, 
    (q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)/(
     SELECT SUM(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) 
     FROM data 
     WHERE customer = :customer 
    )) AS rankingSum 
    FROM data 
    WHERE customer = :customer 
    GROUP BY id 
    ORDER BY rankingSum 
    DESC 

上述查詢返回的值,如:100,06

不是我想要。

回答

2

您在第一個子查詢中缺少paranthesis。 您輸入:

(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)/(
    SELECT SUM(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) 
    FROM data 
    WHERE customer = :customer 
)) AS rankingSum 

正確的是:

((q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6))/(
    SELECT SUM(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) 
    FROM data 
    WHERE customer = :customer 
)) AS rankingSum 
1

只是計算的金額,然後使用它:

SELECT @sum_ranking := (SUM(q1)*7 + SUM(q2) + SUM(q3) + SUM(q4) + SUM(q5) + SUM(q6))/6 FROM data; 
SELECT (q1 + (q1+q2+q3+q4+q5+q6)/6) as ranking, (q1 + (q1+q2+q3+q4+q5+q6)/6)/@sum_ranking FROM data; 
1

等級/總和?

SELECT *, 
(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) AS ranking, 
(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6))/(
    SELECT SUM(q1 + ((q1 + q2 + q3 + q4 + q5 + q6)/6)) 
    FROM data 
    WHERE customer = :customer 
) AS rankingSum 
FROM data 
WHERE customer = :customer 
GROUP BY id 
ORDER BY rankingSum 
DESC