Apache Derby: funkcja COUNT
Opis
Funkcja agregująca (kolumnowa). Oblicza liczbę rzędów. Działa na wszystkich typach danych.
Składnia
COUNT ( [ DISTINCT | ALL] ) Expression)
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ń. jeśli wartość 'Expresion’ jest null – wartość ta jest pomijana.
Wynik jest typu INTEGER
Przykład 1
SELECT COUNT(val) FROM temperatura
gdzie temperatura to tablica zawierająca trzy kolumny: 'id INTEGER’, 'czujnik INTEGER’, 'val DOUBLE’
Otrzymujemy liczbę rzędów w kolumnie 'val’.
Przykład 2
SELECT czujnik, COUNT(val) FROM temperatura GROUP BY czujnik
Otrzymujemy liczbę rzędów z kolumny 'val’ dla każdego czujnika oddzielnie oraz nr tego czujnika.
Przykład 3
Klasa R082_COUNT.java
package aderby.functions.aggr; import aderby.DerbyUtil; import java.sql.*; public class R082_COUNT{ private static final String baza = "C:/Przyklady/r082_count"; 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, COUNT(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(); } }
Plik temperatura2.sql
CREATE TABLE temperatura( id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1), czujnik INTEGER, val DOUBLE ); CREATE INDEX i_czujnik ON temperatura (czujnik ASC); CREATE INDEX i_val ON temperatura (val ASC); INSERT INTO temperatura (czujnik, val) VALUES (2, 37.8); INSERT INTO temperatura (czujnik, val) VALUES (1, 39.7); INSERT INTO temperatura (czujnik, val) VALUES (3, 36.6); INSERT INTO temperatura (czujnik, val) VALUES (3, 33.2); INSERT INTO temperatura (czujnik, val) VALUES (2, 39.2); INSERT INTO temperatura (czujnik, val) VALUES (2, 40.6); INSERT INTO temperatura (czujnik, val) VALUES (2, 41.2); INSERT INTO temperatura (czujnik, val) VALUES (1, 40.1); INSERT INTO temperatura (czujnik, val) VALUES (1, 39.8); INSERT INTO temperatura (czujnik, val) VALUES (2, 38.9); INSERT INTO temperatura (czujnik, val) VALUES (1, 38.3); INSERT INTO temperatura (czujnik, val) VALUES (2, 37.9); INSERT INTO temperatura (czujnik, val) VALUES (2, 37.4); INSERT INTO temperatura (czujnik, val) VALUES (3, 37.1); INSERT INTO temperatura (czujnik, val) VALUES (3, 36.8); INSERT INTO temperatura (czujnik, val) VALUES (3, 36.7); INSERT INTO temperatura (czujnik, val) VALUES (1, 36.6);
1 5.0 2 7.0 3 5.0
Pliki do ściągnięcia
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.