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