我所处的项目需要排名并输出总分给用户。
我有一张名为userdata
的表格,如此
id matricno mtstotal engtotal grandtotal Rank
1 MXX001 6 4
2 MXX002 9 8
3 MXX003 5 3
4 MXX004 4 7
5 MXX005 7 2
SELECT * FROM (
SELECT s.*, @rank := @rank + 1 rank FROM (
SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
WHERE class='1' AND subclass='A'
GROUP BY matricno
) s, (SELECT @rank := 0) init
ORDER BY TotalPoints DESC
) r
此SQL会创建一些临时的
matricno TotalPoints rank
MXX002 17 1
MXX004 11 2
MXX001 10 3
MXX005 9 4
MXX003 8 5
我想要的是添加到上面的一个语句,它将复制TotalPoints和rank值并分别更新grandtotal和Rank列。 即使它正在格式化另一个代码,但它应该能够在一个单一的编码中进行求和,排名和更新
答案 0 :(得分:1)
更新userdata
时,请将您的查询与子查询联系起来并使用其中的值
UPDATE userdata ud
JOIN(
SELECT s.*, @rank := @rank + 1 rank FROM (
SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
WHERE class='1' AND subclass='A'
GROUP BY matricno
) s, (SELECT @rank := 0) init
ORDER BY TotalPoints DESC
) r ON r.matricno = ud.matricno
SET ud.grandtotal = r.TotalPoints,
ud.Rank = r.rank