使用sql中的平均计算更新所有列行

时间:2017-10-19 12:12:28

标签: sql arrays sqlite

我有一个数组从数据库中的列获取值。

String sql1 = "SELECT COUNT(DISTINCT Total) AS Rank FROM class1 s1 JOIN 
class1 s2 ON (s1.Total <= s2.Total) GROUP BY s1.ID ORDER BY s1.Name ASC";

pst = conn.prepareStatement(sql1);
rs = pst.executeQuery();

ArrayList<String> marks = new ArrayList<>();

while (rs.next()) { 
    marks.add(rs.getString(1));
}   

String[] order = new String[marks.listIterator().nextIndex()];
order = marks.toArray(order);

这会对“总列数”中的值进行排名,并在计算列“排名”中显示结果。

然后将计算列中的值存储在名为“order”的数组中。

所以例如:order = [1,2,3],这是计算列排名中的所有3行...

我想做的是使用arraylist中的值更新表中的列Position,这样我的结果就像:

| NAME  | SCORE 1 | SCORE 2 | TOTAL | POSITION | 
+-------+---------+---------+-------+----------+
| james |   10.0  |   24.0  |  34.0 |    1     | 
| jimmy |   10.0  |   20.0  |  30.0 |    2     | 
| josh  |   10.0  |   19.0  |  29.0 |    3     | 

但是当我尝试时,这就是我的表格的样子:

| NAME  | SCORE 1 | SCORE 2 | TOTAL  | POSITION  | 
--------+---------+---------+--------+-----------+
| james |   10.0  |   24.0  |  34.0  |   [1,2,3] | 
| jimmy |   10.0  |   20.0  |  30.0  |   [1,2,3] | 
| josh  |   10.0  |   19.0  |  29.0  |   [1,2,3] |  

这是我用数组来更新“位置列”的代码..

String sql1="SELECT COUNT(DISTINCT Total)AS Rank from class1 s1 JOIN class1 
s2 on(s1.Total<=s2.Total) GROUP BY s1.ID order by s1.Name ASC";
pst = conn.prepareStatement(sql1);
rs = pst.executeQuery();

ArrayList<String> marks = new ArrayList<>();

while (rs.next()) { 
    marks.add(rs.getString(1));
}

String[] order = new String[marks.listIterator().nextIndex()];
order = marks.toArray(order);

String sql = "update class1 set Position ='"+Arrays.toString(order)+"'"; 
pst = conn.prepareStatement(sql);
pst.execute();

请非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

您想为不同的行设置单独的值,但声明

String sql = "update class1 set Position ='"+Arrays.toString(order)+"'";

将为所有行的Position列设置相同的值,此处Arrays.toString(order)将给出值[1,2,3],因此表的最终结果具有值{{的所有行1}}用于列位置。

要正确更新单个行,我们需要为每行传递唯一标识符以更新位置。

伪代码:

[1,2,3]

答案 1 :(得分:0)

非常感谢Clement Amarnath ......你的解决方案是正确的......我只需要将更新语句中的值从1更改为2,从0更改为1。 最初的一个是:

String sql = "update class1 set Position ='"+rs.getString(1)+"'"+"WHERE unique_id="+rs.getString(0); 
    pst = conn.prepareStatement(sql);
    pst.execute();

似乎sqlite3有一种不同的方式来索引它们的默认行..所以我改变了这种方式......

String sql = "update class1 set Position ='"+rs.getString(2)+"'"+"WHERE unique_id="+rs.getString(1); 
    pst = conn.prepareStatement(sql);
    pst.execute();

非常感谢你。愿你保持幸福..