[JAVA] Le monde de Clara-Rules (5)

Dernière fois

Si vous utilisez la fonction accumulator de clara-rules, vous pouvez réaliser quelque chose comme une fonction d'agrégation dans SQL, alors essayez-le cette fois. Je vais le voir.

Aperçu

--Utilisez celui de l'espace de noms clara.rules.accumulators --Min / max / sum etc. sont fournis par défaut

grammaire

[<nom de la variable à lier> <- <accumulateur>: de [<fact> + <constraint>]]

Essayez de bouger

J'ai essayé le code suivant.


(ns clara-rules.accumulator
  (:require [clara.rules :refer [fire-rules insert mk-session query defquery]]
            [clara.rules.accumulators :as acc]))

(defrecord SomeAmount [id amt])

(defquery test-query
  []
  [?largest-amt <- (acc/max :amt) :from [SomeAmount]]
  [?total <- (acc/sum :amt) :from [SomeAmount]]
  [?grouped <- (acc/grouping-by :id) :from [SomeAmount]]
  ;;Total by groups
  [?grouped-and-summed
   <- (acc/grouping-by :id (fn [m]
                             ;;Accepts map key=field for grouping
                             ;;value=seq of maps of records that were grouped
                             (map (fn [[k seq-of-records]]
                                    {k (reduce + (map :amt seq-of-records))})
                                  m)))
   :from [SomeAmount]])

(-> (mk-session)
    (insert (->SomeAmount :a 4)
            (->SomeAmount :a 8)
            (->SomeAmount :b 32)
            (->SomeAmount :b 21)
            (->SomeAmount :c 1)
            (->SomeAmount :c 9))
    (fire-rules)
    (query test-query))
;; => ({:?largest-amt 32,
;;      :?total 75,
;;      :?grouped {:a [#clara_rules.accumulator.SomeAmount{:id :a, :amt 4}
;;                     #clara_rules.accumulator.SomeAmount{:id :a, :amt 8}],
;;                 :b [#clara_rules.accumulator.SomeAmount{:id :b, :amt 32}
;;                     #clara_rules.accumulator.SomeAmount{:id :b, :amt 21}],
;;                 :c [#clara_rules.accumulator.SomeAmount{:id :c, :amt 1}
;;                     #clara_rules.accumulator.SomeAmount{:id :c, :amt 9}]},
;;      :?grouped-and-summed ({:a 12} {:b 53} {:c 10})})

Recommended Posts

Le monde de Clara-Rules (2)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Le monde de Clara-Rules (5)
Jugement du calendrier
L'idée du tri rapide
L'idée de jQuery
À propos de la gestion de Null
Surveillance Docker-expliquant les bases des bases-
Le jeu d'instancier java.lang.Void
Valeur médiane de trois valeurs
L'illusion de l'orientation objet
À propos du comportement de ruby Hash # ==
[Java] Supprimer les éléments de la liste
Suite: La parabole de la POO (omise)
Comprendre le mécanisme de base de log4j2.xml
À propos des bases du développement Android
[Rails] Vérifiez le contenu de l'objet
Remplacez le contenu du fichier Jar
[Édition Java] Histoire de la sérialisation
Vérifiez la version de Cent OS
Explication de l'ordre des itinéraires ferroviaires
J'ai lu la source de ArrayList que j'ai lu
Remarque sur le chemin de request.getRequestDispatcher
J'ai lu la source d'Integer
Ceci et cela de JDK
L'histoire de @ViewScoped dévore la mémoire
Filtrer les fluctuations des données brutes
Expliquer les colonnes de Spree :: Taxonomie
Un mémorandum du problème FizzBuzz
J'ai lu la source de Long
Expliquez la colonne de Spree :: Product
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
Obtenez l'ID de la numérotation automatique
J'ai lu la source de Short
J'ai lu la source de Byte
Ordre de traitement dans le programme
J'ai lu la source de String
L'origine des expressions Java lambda
[Ruby] Afficher le contenu des variables
Filtrer le résultat de BindingResult [Spring]
Débogage à distance du SDK Cognos
À propos du niveau de journalisation de java.util.logging.Logger
Obtenez l'accélération et l'orientation du système de coordonnées mondial sur Android
L'histoire de la rencontre avec l'annotation personnalisée Spring
Afficher le texte en haut de l'image
Essayez d'utiliser || au lieu de l'opérateur ternaire
[Challenge CircleCI from 0] Apprenez les bases de CircleCI
Comprendre les bases de l'enregistrement audio Android
Le secret du succès d'IntelliJ IDEA
Vérifiez le contenu du magasin de certificats Java
Ajuster automatiquement la hauteur du fichier Xib