我需要在sql中计算平均值。有多个条目具有相同的atr_name但得分不同。需要计算每个个人atr_name得分的平均值,并在数据库表中对其进行更新。 我正在尝试将数据提取到arraylist中。但是我没有得到正确的结果。只是给我一个名字而平均值不正确。
ArrayList<String> sc = new ArrayList<String>();
resultSet = statement.executeQuery("select atr_name, avg(newScore) from scores");
while (resultSet.next()) {
sc.add(resultSet.getString("atr_name"));
sc.add(resultSet.getString("avg(newScore)"));
}
for (String a : sc) {
System.out.println(" " + a);
}
答案 0 :(得分:2)
您的查询缺少GROUP BY
子句。在大多数数据库中,它甚至无法运行,但是MySQL允许(在某些模式下),结果您将获得一条记录,该记录具有表级别的平均值,并具有来自某些记录的一些atr_name
值。
但是,您可能还想使用地图存储atr_name
键及其平均分数。
Map<String, Double> sc = new HashMap<>();
String sql = "SELECT atr_name, AVG(newScore) AS avgScore FROM scores GROUP BY atr_name";
rs = statement.executeQuery(sql);
while (rs.next()) {
sc.put(rs.getString("atr_name"), rs.getDouble("avgScore"));
}
sc.forEach((k, v) -> System.out.println("atr_name: " + k + ", average score: " + v));
请注意,我正在调用ResultSet#getDouble
以获取newScore
列的平均值。即使newScore
列是整数,取平均值也应该返回一个浮点数(我认为)。
答案 1 :(得分:0)
您的代码应如下所示:
ArrayList<String> sc = new ArrayList<String>();
resultSet = statement.executeQuery("select atr_name, avg(newScore) AS avgScore from scores GROUP BY atr_name;");
while(resultSet.next())
{
sc.add(resultSet.getString("atr_name"));
sc.add(resultSet.getString("avgScore"));
}
for(String a:sc)
{
System.out.println(" " + a);
}
答案 2 :(得分:0)
下次,如果您问数据库问题,请添加数据库的名称,最好添加数据库的版本。不同数据库上的SQL不同。
在您的陈述中,您缺少group by子句。
尝试从atr_name的得分组中选择atr_name,avg(newScore)