рассчитать среднее значение в sql и обновить его с помощью jdbc - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно рассчитать среднее значение в sql. Есть несколько записей с тем же именем atr_name, но с разными оценками.Необходимо рассчитать среднее значение каждого отдельного значения atr_name и обновить его в таблице базы данных.Я пытаюсь получить данные в массив.Но я не получаю правильных результатов.Это просто дает мне одно имя с неправильным средним.

 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 голосов
/ 26 октября 2018

В следующий раз, если вы зададите вопрос о базе данных, пожалуйста, добавьте имя базы данных и предпочтительную версию из базы данных. SQL отличается в разных базах данных.

В вашем заявлении вы упускаете групповое предложение.

попробуйте выбрать atr_name, avg (newScore) из группы результатов по atr_name

0 голосов
/ 26 октября 2018

В вашем запросе отсутствует предложение 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 является целым числом, взятие среднего значения должно возвращать число с плавающей точкой (я думаю).

0 голосов
/ 26 октября 2018

Ваш код должен выглядеть следующим образом:

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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...