Java sql语句,用于使用排序虚拟列中的值更新真实列

Java sql语句,用于使用排序虚拟列中的值更新真实列,java,sql,Java,Sql,我有一个表,它从总计列中选择值,并将结果排列到计算列中,但由于计算列不是实列,因此我希望将相同的值从计算列复制到同一表中的实列中 private void classStatistics(){ try{ String sql ="select s1.Name as 'Pupil',s1.Maths_Total as 'Total Score'," + "s1.Maths_G as 'Grade',s1.Maths_R as 'Remark',s1.maths_Pos

我有一个表,它从总计列中选择值,并将结果排列到计算列中,但由于计算列不是实列,因此我希望将相同的值从计算列复制到同一表中的实列中

private void classStatistics(){
    try{

     String sql ="select s1.Name as 'Pupil',s1.Maths_Total as 'Total Score',"
     + "s1.Maths_G as 'Grade',s1.Maths_R as 'Remark',s1.maths_Pos AS 
     'Position',COUNT(DISTINCT s2.maths_Total) AS Rank from class1 s1 JOIN 
     class1 s2 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name 
     ASC ";  

    pst=conn.prepareStatement(sql);
    rs=pst.executeQuery();
    class1_statistics.setModel(DbUtils.resultSetToTableModel(rs));



    }
    catch(Exception e){
    e.getMessage();
    }
    finally{
    try{
    rs.close();
    pst.close();
    }
    catch(Exception e){
      }
    }
    class1Entry();
    }
这会将计算列创建为Rank,我想用计算的Rank列中的相同值更新名为Position的列。 我为此写了这段代码

//这是我选择的“数学”专栏的最新信息

private void getPosition(){
    try{
    String sql= "Update class1 set Maths_Pos=(SELECT COUNT(DISTINCT 
 s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC )";
    pst=conn.prepareStatement(sql);
    pst.execute();
    }catch(Exception e){  

    }
finally{
           try{
              rs.close();
              pst.close();
            }
            catch(Exception e){
            }
        }
    }
但这样做的目的是对所有剩余行重复第一行的第一个秩值。因此,不要在列中有不同的值,而是在列中的所有行中运行相同的值。

在更新中:

    String sql= "Update class1 set Maths_Pos=(SELECT COUNT(DISTINCT 
 s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC )";
您的子选择与外部查询不相关

您应该在外部查询中使用别名class1,并在分组列上进行关联:

    String sql= "Update c set Maths_Pos=(SELECT COUNT(DISTINCT 
 s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
 on s1.maths_Total<=s2.maths_Total WHERE s1.ID=c.ID GROUP BY s1.ID order by s1.Name ASC ) FROM class1 c ";

我正在尝试创建一个排名列,该列将根据“结果合计列”对结果进行排名。我设法创建了一个虚拟列,用于计算“结果合计列”中的值,并在“排名列”中显示排名,代码如下:

private void classStatistics(){
    try{

     String sql ="select s1.Name as 'Pupil',s1.Maths_Total as 'Total Score',"
            + "s1.Maths_G as 'Grade',s1.Maths_R as 'Remark',s1.maths_Pos AS 'Position',COUNT(DISTINCT s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC ";  

    pst=conn.prepareStatement(sql);
    rs=pst.executeQuery();
    class1_statistics.setModel(DbUtils.resultSetToTableModel(rs));



    }
    catch(Exception e){
    e.getMessage();
    }
    finally{
    try{
    rs.close();
    pst.close();
    }
    catch(Exception e){
      }
    }
    class1Entry();
    }
这将显示下表:

学生 总分 等级 评论 位置 等级 吉尔 73% B 很好 2. 玛丽 90% A. 杰出的 1. 詹姆斯 50% D 平均的 3.
我不明白你的问题。您可以编辑它并将示例数据与您想象中涉及的原始SQL查询一起包括进来吗?如果您希望人们尝试阅读,请正确缩进您的代码。我得到一个SQL异常,它显示:java.SQL.SQLException:near FROM:syntax error