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/