Aria

Apache Derby – tutorial

Apache Derby: funkcja AVG

Opis

Funkcja agregująca (kolumnowa) działająca na określonej liczbie
wybranych rzędów. Działa na danych typu numerycznego. Oblicza średnią
(average).

Składnia

AVG ( [ DISTINCT | ALL] ) Expresion)

Objaśnienia

‘DISTINCT’ – eliminuje z obliczeń wyniki, które występują
więcej niż raz. W ‘Expression’ ‘DISTINCT’ może być użyte tylko raz.

‘ALL’ jest wartością domyślną i oznacza, że obliczenie musi być
wykonane na wszystkich rzędach.

‘[ DISTINCT | ALL ]’ jest opcjonalne. Jeśli nie zostanie podane
ani ‘DISTINCT’ ani ‘ALL’, zostanie użyta domyślna opcja ‘ALL’

‘Expression’ jest wyrażeniem wybierającym. Może zawierać
referencje do wielu kolumn, ale nie może zawierać więcej niż jednej
funkcji agregującej, ani podzapytań. ‘Expression’ musi dawać wynik
typu numerycznego. Jeśli z jakiejś przyczyny daje wartość NULL, to ta
wartość jest pomijana.

Jeśli wszystkie dane są typu INT to wynik też będzie typu INT
bez promocji do typu zmiennoprzecinkowego.

Przykład 1

SELECT AVG(val) FROM temperatura

gdzie temperatura to tabela zawierająca trzy kolumny: ‘id
INTEGER’, ‘czujnik INTEGER’, ‘val DOUBLE’

Otrzymujemy średnią wszystkich wartości z kolumny ‘val’.

Przykład 2

SELECT czujnik, AVG(val) FROM temperatura GROUP BY czujnik

Otrzymujemy średnią wyników z kolumny ‘val’ dla każdego
czujnika oddzielnie oraz nr tego czujnika.

Przykład 3

Przykład w klasie R082_AVG:
package aderby.functions.aggr;

import aderby.DerbyUtil;

import java.sql.*;

public class R082_AVG {
    private static final String baza =
      "C:/Przyklady/r082_avg";
    private static final String skrypt =
       "aderby/src/resources/sqls/temperatura2.sql";

    public static void main(String[] args) {
        DerbyUtil.startDerbyEngine(DerbyUtil.embdriver);
        Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true");
        DerbyUtil.jdbcRunScript(skrypt, con);
        Statement stat = null;
        ResultSet rs = null;
        try {
            stat = con.createStatement();
            rs = stat.executeQuery(
             "SELECT czujnik, AVG(val) FROM temperatura GROUP BY czujnik");
            while (rs.next()) {
                System.out.println(rs.getInt(1) + " " + rs.getDouble(2));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DerbyUtil.close(stat);
        DerbyUtil.close(con);
        DerbyUtil.close(rs);
        DerbyUtil.shutdownEmbeddedDB(baza);
        DerbyUtil.shutdownDerbyEngine();
    }
}

Wynik

1 38.9
2 39.0
3 36.08

Pliki do ściągnięcia

R082_AVG.zip (klasa)

temperatura2.zip (skrypt)

Aktualny (tworzony narastająco) plik module-info.java

Aktualny (tworzony narastająco) plik DerbyUtil.java

Pliki tworzone narastająco zastępują poprzednie pliki o tej samej
nazwie i działają dla wszystkich wcześniej opublikowanych przykładów
we wszystkich wpisach w projekcie. W przypadku pliku
module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.