php - MySql SELECT语句计算排名

标签 php mysql

表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 查询中执行以下操作以获得以下结果(我将其分为 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

不是我想要的。

最佳答案

您在第一个子查询中缺少括号。 您输入了:

(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

关于php - MySql SELECT语句计算排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17951381/

相关文章:

PHP 去掉未知文件扩展名

php - 使用变量设置背景 URL - 我做错了什么?

mysql - 将本体连接到预先存在的数据库

MySQL IF NOT EXISTS/IFNULL 选择其他列

php - MYSQL/PHP 如何查找以相同单词开头的所有行?

php - linux 上的 blueimp jquery 上传删除不起作用

php - 如何在创建表时创建外键

Java 准备语句加密

php - 如何避免SRP乱象?

mysql - 如何在 Delphi 中接收 MySQL 数据库通知?