php - SQL查询中的5分评分公式

标签 php mysql sql

       RATING
[  id -  pid = rate]
[  1  -   1  -  5  ]
[  2  -   1  -  5  ]
[  3  -   1  -  4  ]
[  4  -   1  -  1  ]
[  5  -   1  -  1  ]

WHERE pid = 1;
$r5 = 10;
$r4 = 4;
$r3 = 0;
$r2 = 0;
$r1 = 2;
$tt = 16;

从这张表中我试图得出这个数学公式

($r5*5 + $r4*4 + $r3*3 + $r2*2 + $r1) / $tt

不是将所有值调用到数组中并计算它,我可以在查询本身内部做什么?对于网站来说,哪一种实际上更快、最高效?

最佳答案

您可以使用以下解决方案:

SELECT pid,
    (((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) +
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) +
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) +
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) +
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1)) / SUM(rate)) AS c_rate
FROM table_name
WHERE pid = 1
GROUP BY pid

要格式化输出而不舍入结果,您可以使用 TRUNCATE 。您还可以使用ROUND结果是否应四舍五入并截断。

使用TRUNCATE的解决方案:

SELECT pid,
    TRUNCATE((((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) +
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) +
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) +
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) +
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1)) / SUM(rate)), 1) AS c_rate
FROM table_name
WHERE pid = 1
GROUP BY pid

使用ROUND的解决方案:

SELECT pid,
    ROUND((((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) +
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) +
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) +
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) +
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1)) / SUM(rate)), 1) AS c_rate
FROM table_name
WHERE pid = 1
GROUP BY pid

关于php - SQL查询中的5分评分公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905848/

相关文章:

php - MySQL错误: This command is not supported in the prepared statement protocol yet

php - SQL - 两个表检索数据

sql - 加入更新需要很长时间

php - 检查 DynamoDB 中是否存在表的最佳方法是什么?

javascript - 如何在 jquery 中为 ajax post 数据字符串设置隐藏字段的值?

php - PHP : mysqli_fetch_array() expects parameter 1 [closed]中的错误消息

mysql - Mac 操作系统塞拉利昂 "ERROR! MySQL server PID file could not be found!"

php - 显示 MySQL 数据库的结果数

sql - 获取请求的其余部分的响应

sql - 将数据转换为多列