0

表格1

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

我有一个 mysql 表,上面有 7 个字段和 4 行数据,如“table1”。每个 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(排名)

或者

排名/SUM(排名)

所以每行应该返回 200 的值:200 / SUM(ranking)

这应该等于 0.25 (200 / 800 = 0.25) (ranking / SUM(ranking))

我目前有以下 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

不是我想要的。

4

3 回答 3

2

您在第一个子查询中缺少括号。你进来了:

(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
于 2013-07-30T15:49:08.287 回答
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;
于 2013-07-30T15:45:07.410 回答
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
于 2013-07-30T15:48:45.653 回答