表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
我有一个包含7个字段和4行数据的mysql表,如上面的“table1”。每个q1 - q6都有一个数值,比方说100,这样可以很容易地理解我们的等式是否有效。
我想在我的mysql查询中执行以下操作以获得下面的结果(我已将其分为两个步骤以使其更容易理解,但我需要在一个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(200/800 = 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
不是我想要的。
答案 0 :(得分: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
答案 1 :(得分: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;
答案 2 :(得分: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