möchte ich glatt zwingen, Abfragen zu erstellen wieWie man Aggregationen mit Slick
select max(price) from coffees where ...
Aber slick's documentation nicht
val q = Coffees.map(_.price) //this is query Query[Coffees.type, ...]
val q1 = q.min // this is Column[Option[Double]]
val q2 = q.max
val q3 = q.sum
val q4 = q.avg
hilft Weil die q1-q4 nicht Abfragen sind, kann ich bekomme die Ergebnisse nicht, kann sie aber in anderen Abfragen verwenden.
Diese Aussage
for {
coffee <- Coffees
} yield coffee.price.max
erzeugt richtige Abfrage aber ist veraltet (erzeugt Warnung: "Methode max in der Klasse ColumnExtensionMethods veraltet ist: Verwenden Sie Query.max statt"). Wie generiert man eine solche Abfrage ohne Warnungen?
Ein weiteres Problem ist mit der Gruppe zum Aggregieren von:
"select name, max(price) from coffees group by name"
versucht, es zu lösen, mit
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
die
select x2.x3, x2.x3, x2.x4 from (select x5."COF_NAME" as x3, max(x5."PRICE") as x4 from "coffees" x5) x2 group by x2.x3
erzeugt, die
offensichtlich db Fehler verursachtcolumn "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
Wie generiert man solche Abfragen?
statt '.list.head' man kann sagen, kann '.first', IIRC –
Dank, änderte ich es in der Antwort – EECOLOR
Danke, beide Beispiele arbeiten, Sekunde generiert optimale Abfrage "wählen x2." COF_NAME ", max (x2." PREIS ") von" Kaffees "x2 Gruppe von x2." COF_NAME "", aber der erste erzeugt "wählen x2.x3 von (wählen Sie max (x4. x5) als x3 von (wählen x6. "PREIS" als x5 von "Kaffee" x6) x4) x2 "- Abfrage mit 2 Unterabfragen statt einfach" wählen Sie max (x2. "PREIS") von "Kaffees" x2 "das ist generiert von veraltetem API. Es scheint, dass glatte Entwickler diese API zu früh veraltet haben. – Jeriho