java—计算sql中的平均值,并使用jdbc进行更新

eagi6jfj  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(610)

我需要计算sql中的平均值。有多个条目具有相同的atr\ U名称,但分数不同。需要计算每个atr\U名称得分的平均值,并在数据库表中更新它。我正试图把数据放到一个数组列表中。但我没有得到正确的结果。只是给了我一个平均值错误的名字。

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);
}
emeijp43

emeijp431#

您的查询缺少 GROUP BY 条款。在大多数数据库中,它甚至不会运行,但mysql允许in(在某些模式下),因此您将得到一条表级平均值的记录,以及一些 atr_name 某个记录的值。
但是,您可能还需要使用Map来存储 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 列是整数,取平均值应该返回一个浮点(我认为)。

dddzy1tm

dddzy1tm2#

下次如果你问一个数据库问题,请添加数据库的名称和数据库的版本。sql在不同的数据库上是不同的。
在您的语句中缺少一个GROUPBY子句。
尝试按atr\ U名称从分数组中选择atr\ U名称,avg(新闻核心)

yyyllmsg

yyyllmsg3#

您的代码应该如下所示:

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);
        }

相关问题