[JAVA] Die Welt der Clara-Regeln (5)

Letztes Mal

Wenn Sie die Funktion accumulator von clara-rules verwenden, können Sie so etwas wie eine Aggregatfunktion in SQL realisieren. Probieren Sie es also dieses Mal aus. Ich werde es sehen.

Überblick

--Verwenden Sie den Namen im Namespace clara.rules.accumulators --Min / Max / Summe usw. werden standardmäßig bereitgestellt

Grammatik

[<zu bindender Variablenname> <- <Akkumulator>: von [<Fakt> + <Beschränkung>]]

Versuche dich zu bewegen

Ich habe den folgenden Code ausprobiert.


(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

Die Welt der Clara-Regeln (2)
Die Welt der Clara-Regeln (1)
Die Welt der Clara-Regeln (3)
Die Welt der Clara-Regeln (5)
Beurteilung des Kalenders
Die Idee der schnellen Sortierung
Die Idee von jQuery
Über den Umgang mit Null
Docker-Überwachung - Erläuterung der Grundlagen der Grundlagen
Das Spiel der Instanziierung von java.lang.Void
Medianwert von drei Werten
Die Illusion der Objektorientierung
Über das Verhalten von Ruby Hash # ==
[Java] Löschen Sie die Elemente von List
Fortsetzung: Das Gleichnis von OOP (weggelassen)
Verstehen Sie den grundlegenden Mechanismus von log4j2.xml
Über die Grundlagen der Android-Entwicklung
[Schienen] Überprüfen Sie den Inhalt des Objekts
Ersetzen Sie den Inhalt der Jar-Datei
[Java Edition] Geschichte der Serialisierung
Überprüfen Sie die Version von Cent OS
Erläuterung der Reihenfolge der Schienenrouten
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Hinweis zum Pfad von request.getRequestDispatcher
Ich habe die Quelle von Integer gelesen
Dies und das von JDK
Die Geschichte von @ViewScoped, die Speicher verschlingt
Filtern Sie die Schwankungen der Rohdaten
Erklären der Spalten von Spree :: Taxonomy
Ein Memorandum über das FizzBuzz-Problem
Ich habe die Quelle von Long gelesen
Erklären Sie die Spalte von Spree :: Product
Informationen zur Rolle der Initialisierungsmethode
Denken Sie an die 7 Regeln von Optional
Holen Sie sich die ID der automatischen Nummerierung
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von Byte gelesen
Reihenfolge der Verarbeitung im Programm
Ich habe die Quelle von String gelesen
Der Ursprung von Java-Lambda-Ausdrücken
[Ruby] Zeigt den Inhalt von Variablen an
Filtern Sie das Ergebnis von BindingResult [Spring]
Remote-Debugging von Cognos SDK
Informationen zur Protokollebene von java.util.logging.Logger
Holen Sie sich die Beschleunigung und Ausrichtung des Weltkoordinatensystems auf Android
Die Geschichte der Begegnung mit Spring Custom Annotation
Zeigen Sie Text über dem Bild an
Versuchen Sie, || anstelle des ternären Operators zu verwenden
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
Verstehen Sie die Grundlagen von Android Audio Record
Das Erfolgsgeheimnis von IntelliJ IDEA
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Passen Sie die Höhe der Xib-Datei automatisch an