Lindorm SQL prend en charge les fonctions d'agrégation pour calculer des résumés sur plusieurs lignes : totaux, moyennes, extrêmes et chaînes concaténées.
Moteurs et versions applicables
| Moteur | Version |
|---|---|
| LindormTable | Toutes les versions |
| LindormTSDB | V3.4.7 et ultérieures |
Les fonctions HEAD et GROUP_CONCAT nécessitent LindormTable 2.7.9 ou version ultérieure, ainsi que Lindorm SQL 2.8.8.0 ou version ultérieure.
Fonctions
| Fonction | Description | Version requise |
|---|---|---|
| AVG | Renvoie la moyenne de toutes les valeurs d'une colonne | Toutes les versions |
| COUNT | Renvoie le nombre de valeurs non vides dans une colonne, ou le nombre total de lignes | Toutes les versions |
| MAX | Renvoie la valeur maximale d'une colonne | Toutes les versions |
| MIN | Renvoie la valeur minimale d'une colonne | Toutes les versions |
| SUM | Renvoie la somme des valeurs d'une colonne | Toutes les versions |
| HEAD | Renvoie la première valeur non vide d'une colonne ou d'une expression, avec un ordre de tri facultatif | LindormTable 2.7.9+, Lindorm SQL 2.8.8.0+ |
| GROUP_CONCAT | Concatène les valeurs de colonne au sein de chaque groupe en une seule chaîne | LindormTable 2.7.9+, Lindorm SQL 2.8.8.0+ |
Exemple de table
Les exemples de cette rubrique utilisent la table sensor suivante :
-- Create a table named 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)
);
-- Write multiple rows of data at the same time.
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
Renvoie la moyenne de toutes les valeurs de la colonne spécifiée.
Syntaxe
AVG(column_name)
Paramètres
| Paramètre | Description |
|---|---|
column_name |
La colonne dont il faut calculer la moyenne. Doit être de type de données numérique. |
Exemple
Calculez la température moyenne pour tous les appareils :
SELECT AVG(temperature) AS temperature FROM sensor;
Résultat :
+--------------------+
| temperature |
+--------------------+
| 16.133333333333333 |
+--------------------+
COUNT
Renvoie le nombre de valeurs non vides dans la colonne spécifiée, ou le nombre total de lignes lorsque la fonction est appelée avec *.
Syntaxe
COUNT(* | column_name)
Paramètres
| Paramètre | Description |
|---|---|
column_name |
La colonne dans laquelle il faut compter les valeurs non vides. |
* |
Compte toutes les lignes, y compris celles contenant des valeurs nulles. |
Exemples
Comptez le nombre de relevés de température :
SELECT COUNT(temperature) AS temperature FROM sensor;
Résultat :
+-------------+
| temperature |
+-------------+
| 3 |
+-------------+
Comptez les lignes où device_id est égal à F07A1260 :
SELECT COUNT(*) FROM sensor WHERE device_id = 'F07A1260';
Résultat :
+--------+
| EXPR$0 |
+--------+
| 1 |
+--------+
Comptez toutes les lignes de la table :
SELECT COUNT(*) FROM sensor;
Résultat :
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+
MAX
Renvoie la valeur maximale de la colonne spécifiée.
Syntaxe
MAX(column_name)
Paramètres
| Paramètre | Description |
|---|---|
column_name |
La colonne à évaluer. |
Exemple
Obtenez la température la plus élevée enregistrée sur tous les appareils :
SELECT MAX(temperature) FROM sensor;
Résultat :
+--------+
| EXPR$0 |
+--------+
| 19.7 |
+--------+
MIN
Renvoie la valeur minimale de la colonne spécifiée.
Syntaxe
MIN(column_name)
Paramètres
| Paramètre | Description |
|---|---|
column_name |
La colonne à évaluer. |
Exemple
Obtenez la température la plus basse enregistrée sur tous les appareils :
SELECT MIN(temperature) FROM sensor;
Résultat :
+--------+
| EXPR$0 |
+--------+
| 10.6 |
+--------+
SUM
Renvoie la somme des valeurs de la colonne spécifiée.
Syntaxe
SUM(column_name)
Paramètres
| Paramètre | Description |
|---|---|
column_name |
La colonne dont il faut calculer la somme. Doit être de type de données numérique. |
Exemple
Calculez le total de tous les relevés de température :
SELECT SUM(temperature) FROM sensor;
Résultat :
+--------+
| EXPR$0 |
+--------+
| 48.4 |
+--------+
HEAD
Renvoie la première valeur non vide de la colonne ou de l'expression spécifiée par expr1. Les lignes sont triées selon expr2 avant la sélection de la première valeur. Si expr2 est omis, les lignes sont triées selon la première colonne de clé primaire.
LindormTable 2.7.9 ou version ultérieure et Lindorm SQL 2.8.8.0 ou version ultérieure sont requis. Vérifiez vos versions actuelles dans la console : Notes de version de LindormTable et Description de la version de Lindorm SQL. Pour effectuer une mise à niveau, consultez la section Mettre à jour la version mineure du moteur d'une instance LindormTable.
Syntaxe
HEAD (expr1 [ ORDER BY expr2 [ DESC ] ] )
Paramètres
| Paramètre | Description |
|---|---|
expr1 |
La colonne ou l'expression à partir de laquelle il faut récupérer la première valeur non vide. Types de données pris en charge : INTEGER, BIGINT, SMALLINT, TINYINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, VARCHAR, CHAR, TIMESTAMP, JSON et GEOMETRY. |
expr2 |
La colonne ou l'expression servant au tri. Si elle est omise, les lignes sont triées selon la première colonne de clé primaire. Ne peut pas être une autre fonction d'agrégation — par exemple, HEAD(c1 ORDER BY COUNT(c2)) n'est pas pris en charge. |
Exemples
Obtenez les températures minimales et maximales en utilisant un tri croissant et décroissant :
SELECT HEAD(temperature ORDER BY temperature), HEAD(temperature ORDER BY temperature DESC) FROM sensor;
Résultat :
+--------+--------+
| EXPR$0 | EXPR$1 |
+--------+--------+
| 10.6 | 19.7 |
+--------+--------+
Obtenez la température de l'appareil dont l'device_id est le plus court :
SELECT HEAD(temperature ORDER BY LENGTH(device_id)) FROM sensor;
Résultat :
+--------+
| EXPR$0 |
+--------+
| 10.6 |
+--------+
GROUP_CONCAT
Regroupe les lignes selon les colonnes spécifiées dans une clause GROUP BY, trie les valeurs au sein de chaque groupe et les concatène en une seule chaîne.
LindormTable 2.7.9 ou version ultérieure et Lindorm SQL 2.8.8.0 ou version ultérieure sont requis. Vérifiez vos versions actuelles dans la console : Notes de version de LindormTable et Description de la version de Lindorm SQL. Pour effectuer une mise à niveau, consultez la section Mettre à jour la version mineure du moteur d'une instance LindormTable.
Syntaxe
GROUP_CONCAT ( [ DISTINCT ] expr (, expr ... )*
[ ORDER BY col_name [ DESC ] (, col_name [ DESC ])* ]
[ SEPARATOR str_val ] )
Les mots-clés DISTINCT et ORDER BY ne peuvent pas être utilisés conjointement dans le même appel de fonction GROUP_CONCAT.
Paramètres
| Paramètre | Description |
|---|---|
expr |
La colonne de projection à concaténer. |
col_name |
La colonne de tri. |
str_val |
Le séparateur entre les valeurs concaténées. |
Exemples
Les exemples suivants utilisent la table t1 :
-- Create a sample table named t1.
CREATE TABLE t1 (p1 INT, p2 VARCHAR, c1 INT, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1, p2));
-- Insert data into the table.
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);
Exemple 1 : Concaténez les valeurs de c1 groupées par p1 :
SELECT p1, GROUP_CONCAT(c1) FROM t1 GROUP BY p1;
Résultat :
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,10,18 |
| 2 | 40,100,66 |
+----+-----------+
Exemple 2 : Concaténez les valeurs distinctes de c1 groupées par p1 :
SELECT p1, GROUP_CONCAT(DISTINCT c1) FROM t1 GROUP BY p1;
Résultat :
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 18,10 |
| 2 | 100,40,66 |
+----+-----------+
Exemple 3 : Concaténez les valeurs de c1 groupées par p1, triées par ordre croissant selon c1 :
SELECT p1, GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY p1;
Résultat :
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,10,18 |
| 2 | 40,66,100 |
+----+-----------+
Exemple 4 : Concaténez les valeurs de c1 groupées par p1, triées par ordre décroissant selon c3 :
SELECT p1, GROUP_CONCAT(c1 ORDER BY c3 DESC) FROM t1 GROUP BY p1;
Résultat :
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10,18,10 |
| 2 | 66,100,40 |
+----+-----------+
Exemple 5 : Identique à l'exemple 4, mais avec un séparateur pipe (|) :
SELECT p1, GROUP_CONCAT(c1 ORDER BY c3 DESC SEPARATOR '|') FROM t1 GROUP BY p1;
Résultat :
+----+-----------+
| p1 | EXPR$1 |
+----+-----------+
| 1 | 10|18|10 |
| 2 | 66|100|40 |
+----+-----------+