用sql计算平均值并使用jdbc

时间:2018-10-26 07:10:13

标签: java mysql jdbc

我需要在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);
}

3 个答案:

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