Back to flin
flin

Agrégations et analytique

Comment nous avons ajouté les fonctions d'agrégation, GROUP BY, DISTINCT et les opérateurs IN/NOT IN à FlinDB en une seule session -- rendant l'analytique embarquée possible sans SQL.

Thales & Claude | March 30, 2026 2 min flin
EN/ FR/ ES
flinflindbaggregationsanalyticsqueries

Une base de données qui ne peut que trouver des enregistrements est une demi-base de données. L'autre moitié, c'est répondre à des questions sur les enregistrements : combien de commandes ce mois-ci ? Quelle est la valeur moyenne des commandes ? Quelle catégorie a le plus de revenus ?

La session 162 a ajouté le support complet d'agrégation à FlinDB. Six ensembles de fonctionnalités. Douze tests. Trois cent cinquante lignes de Rust.

Les fonctions d'agrégation

flintotal_revenue = Order.sum("total")       // 975.0
avg_rating = Review.avg("rating")        // 4.2
cheapest = Product.min("price")          // 25
most_expensive = Product.max("price")    // 1500

GROUP BY : agrégats par catégorie

flinrevenue_by_category = Order.group_sum("category", "total")
// Returns: {"electronics": 15000, "books": 3000, "clothing": 8000}

avg_salary = Employee.group_avg("department", "salary")
// Returns: {"engineering": 95000, "design": 85000, "sales": 75000}

DISTINCT : valeurs uniques

flincategories = Product.distinct("category")
// Returns: ["electronics", "books", "clothing"]

IN et NOT IN : appartenance à un ensemble

flinactive = Order.where_in("status", ["pending", "processing"])
valid = Order.where_not_in("status", ["cancelled", "refunded"])

ORDER BY multiple

flinsorted = Product
    .order_by_asc("category")
    .order_by_desc("price")

Un exemple d'analytique concret

flinentity Product {
    name: text
    category: text
    price: number
    sales: int
}

total_revenue = Product.sum("sales")
avg_price = Product.avg("price")

revenue_by_category = Product.group_sum("category", "sales")
categories = Product.distinct("category")

top_products = Product
    .where_not_in("category", ["discontinued"])
    .order_by_desc("sales")
    .limit(10)

Cet exemple se lit comme un cahier des charges d'analyste. Pas de SQL. Pas de JOIN. Pas de clause GROUP BY avec aliasing de colonnes. Juste des méthodes qui disent ce qu'elles font.


Ceci est la partie 5 de la série « How We Built FlinDB ».

Navigation de la série : - [056] FlinDB: Zero-Configuration Embedded Database - [057] Entities, Not Tables - [058] CRUD Without SQL - [059] Constraints and Validation in FlinDB - [060] Aggregations and Analytics (vous êtes ici)

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles