您可以採用如下方案:
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
公式表明值以某種方式排列,或者你有標識,而─的一種方式是 - 這。 SQL表格代表*無序*集合,因此您的問題沒有足夠的信息來回答問題。 –
@GordonLinoff所以不可能通過SQL來完成,因爲我無法識別* x常量? –
將問題修改爲包含唯一標識後,顯然可以。 –