Lindorm SQL mendukung fungsi agregat untuk menghitung ringkasan lintas baris—seperti total, rata-rata, nilai ekstrem, dan string yang digabungkan.
Mesin dan versi yang berlaku
| Mesin | Versi |
|---|---|
| LindormTable | Semua versi |
| LindormTSDB | V3.4.7 dan yang lebih baru |
HEAD dan GROUP_CONCAT memerlukan LindormTable 2.7.9 atau yang lebih baru serta Lindorm SQL 2.8.8.0 atau yang lebih baru.
Fungsi
| Fungsi | Deskripsi | Persyaratan versi |
|---|---|---|
| AVG | Mengembalikan rata-rata dari semua nilai dalam suatu kolom | Semua versi |
| COUNT | Mengembalikan jumlah nilai tidak kosong dalam suatu kolom, atau jumlah total baris | Semua versi |
| MAX | Mengembalikan nilai maksimum dalam suatu kolom | Semua versi |
| MIN | Mengembalikan nilai minimum dalam suatu kolom | Semua versi |
| SUM | Mengembalikan jumlah nilai dalam suatu kolom | Semua versi |
| HEAD | Mengembalikan nilai pertama yang tidak kosong dalam suatu kolom atau ekspresi, dengan urutan pengurutan opsional | LindormTable 2.7.9+, Lindorm SQL 2.8.8.0+ |
| GROUP_CONCAT | Menggabungkan nilai kolom dalam setiap kelompok menjadi satu string | LindormTable 2.7.9+, Lindorm SQL 2.8.8.0+ |
Tabel contoh
Contoh dalam topik ini menggunakan tabel sensor berikut:
-- Buat tabel bernama sensor.
CREATE TABLE sensor(
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
-- Tulis beberapa baris data sekaligus.
UPSERT INTO sensor(device_id ,region ,time,temperature) VALUES('F07A1260','north-cn','2021-04-22 15:33:20',10.6), ('F07A1261','south-cn','2021-04-22 15:33:00',18.1), ('F07A1261','south-cn','2021-04-22 15:33:10',19.7);AVG
Mengembalikan rata-rata dari semua nilai dalam kolom yang ditentukan.
Sintaks
AVG(column_name)Parameter
| Parameter | Deskripsi |
|---|---|
column_name | Kolom yang akan dirata-ratakan. Harus bertipe data numerik. |
Contoh
Hitung rata-rata suhu di seluruh perangkat:
SELECT AVG(temperature) AS temperature FROM sensor;Output:
+--------------------+
| temperature |
+--------------------+
| 16.133333333333333 |
+--------------------+COUNT
Mengembalikan jumlah nilai tidak kosong dalam kolom yang ditentukan, atau jumlah total baris saat dipanggil dengan *.
Sintaks
COUNT(* | column_name)Parameter
| Parameter | Deskripsi |
|---|---|
column_name | Kolom tempat menghitung nilai tidak kosong. |
* | Menghitung semua baris, termasuk baris dengan nilai null. |
Contoh
Hitung jumlah pembacaan suhu:
SELECT COUNT(temperature) AS temperature FROM sensor;Output:
+-------------+
| temperature |
+-------------+
| 3 |
+-------------+Hitung baris di mana device_id adalah F07A1260:
SELECT COUNT(*) FROM sensor WHERE device_id = 'F07A1260';Output:
+--------+
| EXPR$0 |
+--------+
| 1 |
+--------+Hitung semua baris dalam tabel:
SELECT COUNT(*) FROM sensor;Output:
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+MAX
Mengembalikan nilai maksimum dalam kolom yang ditentukan.
Sintaks
MAX(column_name)Parameter
| Parameter | Deskripsi |
|---|---|
column_name | Kolom yang akan dievaluasi. |
Contoh
Ambil suhu tertinggi yang tercatat di seluruh perangkat:
SELECT MAX(temperature) FROM sensor;Output:
+--------+
| EXPR$0 |
+--------+
| 19.7 |
+--------+MIN
Mengembalikan nilai minimum dalam kolom yang ditentukan.
Sintaks
MIN(column_name)Parameter
| Parameter | Deskripsi |
|---|---|
column_name | Kolom yang akan dievaluasi. |
Contoh
Ambil suhu terendah yang tercatat di seluruh perangkat:
SELECT MIN(temperature) FROM sensor;Output:
+--------+
| EXPR$0 |
+--------+
| 10.6 |
+--------+SUM
Mengembalikan jumlah nilai dalam kolom yang ditentukan.
Sintaks
SUM(column_name)Parameter
| Parameter | Deskripsi |
|---|---|
column_name | Kolom yang akan dijumlahkan. Harus bertipe data numerik. |
Contoh
Hitung total semua pembacaan suhu:
SELECT SUM(temperature) FROM sensor;Output:
+--------+
| EXPR$0 |
+--------+
| 48.4 |
+--------+HEAD
Mengembalikan nilai pertama yang tidak kosong dalam kolom atau ekspresi yang ditentukan oleh expr1. Baris diurutkan berdasarkan expr2 sebelum memilih nilai pertama. Jika expr2 dihilangkan, baris diurutkan berdasarkan kolom kunci primer pertama.
Diperlukan LindormTable 2.7.9 atau yang lebih baru serta Lindorm SQL 2.8.8.0 atau yang lebih baru. Periksa versi Anda saat ini di Konsol: Catatan rilis LindormTable dan Deskripsi versi Lindorm SQL. Untuk upgrade, lihat Perbarui versi mesin minor instans LindormTable.
Sintaks
HEAD (expr1 [ ORDER BY expr2 [ DESC ] ] )Parameter
| Parameter | Deskripsi |
|---|---|
expr1 | Kolom atau ekspresi tempat mengambil nilai pertama yang tidak kosong. Tipe data yang didukung: INTEGER, BIGINT, SMALLINT, TINYINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, VARCHAR, CHAR, TIMESTAMP, JSON, dan GEOMETRY. |
expr2 | Kolom atau ekspresi untuk pengurutan. Jika dihilangkan, baris diurutkan berdasarkan kolom kunci primer pertama. Tidak boleh merupakan fungsi agregat lain — misalnya, HEAD(c1 ORDER BY COUNT(c2)) tidak didukung. |
Contoh
Ambil suhu minimum dan maksimum menggunakan pengurutan menaik dan menurun:
SELECT HEAD(temperature ORDER BY temperature), HEAD(temperature ORDER BY temperature DESC) FROM sensor;Output:
+--------+--------+
| EXPR$0 | EXPR$1 |
+--------+--------+
| 10.6 | 19.7 |
+--------+--------+Ambil suhu untuk perangkat dengan device_id terpendek:
SELECT HEAD(temperature ORDER BY LENGTH(device_id)) FROM sensor;Output:
+--------+
| EXPR$0 |
+--------+
| 10.6 |
+--------+GROUP_CONCAT
Mengelompokkan baris berdasarkan kolom yang ditentukan dalam klausa GROUP BY, mengurutkan nilai dalam setiap kelompok, lalu menggabungkannya menjadi satu string.
Diperlukan LindormTable 2.7.9 atau yang lebih baru serta Lindorm SQL 2.8.8.0 atau yang lebih baru. Periksa versi Anda saat ini di Konsol: Catatan rilis LindormTable dan Deskripsi versi Lindorm SQL. Untuk upgrade, lihat Perbarui versi mesin minor instans LindormTable.
Sintaks
GROUP_CONCAT ( [ DISTINCT ] expr (, expr ... )*
[ ORDER BY col_name [ DESC ] (, col_name [ DESC ])* ]
[ SEPARATOR str_val ] )DISTINCT dan ORDER BY tidak dapat digunakan bersama dalam pemanggilan GROUP_CONCAT yang sama.
Parameter
| Parameter | Deskripsi |
|---|---|
expr | Kolom proyeksi yang akan digabungkan. |
col_name | Kolom pengurutan. |
str_val | Pemisah antara nilai yang digabungkan. |
Contoh
Contoh berikut menggunakan tabel t1:
-- Buat tabel contoh bernama t1.
CREATE TABLE t1 (p1 INT, p2 VARCHAR, c1 INT, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1, p2));
-- Masukkan data ke dalam tabel.
UPSERT INTO t1(p1, p2, c1, c2, c3) VALUES
(1, 'a', 10, 'java', 10.23),
(1, 'b', 10, 'c/c++', 5.76),
(1, 'c', 18, 'python', 8.21),
(2, 'a', 40, 'sql', 3.14),
(2, 'b', 100, 'c#', 4.96),
(2, 'c', 66, 'matlab', 7.01);Contoh 1: Gabungkan nilai c1 yang dikelompokkan berdasarkan p1:
SELECT p1, GROUP_CONCAT(c1) FROM t1 GROUP BY p1;Output:
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,10,18 |
| 2 | 40,100,66 |
+----+-----------+Contoh 2: Gabungkan nilai c1 unik yang dikelompokkan berdasarkan p1:
SELECT p1, GROUP_CONCAT(DISTINCT c1) FROM t1 GROUP BY p1;Output:
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 18,10 |
| 2 | 100,40,66 |
+----+-----------+Contoh 3: Gabungkan nilai c1 yang dikelompokkan berdasarkan p1, diurutkan menaik berdasarkan c1:
SELECT p1, GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY p1;Output:
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,10,18 |
| 2 | 40,66,100 |
+----+-----------+Contoh 4: Gabungkan nilai c1 yang dikelompokkan berdasarkan p1, diurutkan menurun berdasarkan c3:
SELECT p1, GROUP_CONCAT(c1 ORDER BY c3 DESC) FROM t1 GROUP BY p1;Output:
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,18,10 |
| 2 | 66,100,40 |
+----+-----------+Contoh 5: Sama seperti Contoh 4, tetapi dengan pemisah pipa (|):
SELECT p1, GROUP_CONCAT(c1 ORDER BY c3 DESC SEPARATOR '|') FROM t1 GROUP BY p1;Output:
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10|18|10 |
| 2 | 66|100|40 |
+----+-----------+