从选择结果

时间:2015-12-24 20:33:32

标签: php mysql sql

我所处的项目需要排名并输出总分给用户。

我有一张名为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列。 即使它正在格式化另一个代码,但它应该能够在一个单一的编码中进行求和,排名和更新

1 个答案:

答案 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