voglio forzare chiazza di petrolio per creare query comeCome fare aggregazioni con chiazza di petrolio
select max(price) from coffees where ...
Ma slick's documentation non aiuta
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
Perché quelli Q1-Q4 non sono domande, posso ottenere i risultati ma può usarli all'interno di altre query.
Questa affermazione
for {
coffee <- Coffees
} yield coffee.price.max
genera domanda giusta, ma è deprecato (genera allarme: "il metodo max in ColumnExtensionMethods classe è deprecato: Usa Query.max invece"). Come generare tale query senza avvisi?
Un altro problema è quello di aggregare con il gruppo da:
"select name, max(price) from coffees group by name"
cercato di risolvere con
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
che genera
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
che causa evidente errore db
column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
Come generare tale query?
invece di '.list.head' voi posso fare '.first', IIRC –
Grazie, l'ho cambiato nella risposta – EECOLOR
Grazie, entrambi gli esempi funzionano, secondo genera query ottimale "seleziona x2". COF_NAME ", max (x2." PREZZO ") da" caffè "x2 gruppo per x2." COF_NAME "", ma il primo genera "seleziona x2.x3 da (seleziona max (x4. x5) come x3 da (selezionare x6. "PREZZO" come x5 da "caffè" x6) x4) x2 "- query con 2 sottoquery anziché semplice" selezionare max (x2. "PREZZO") da "caffè" x2 "che è generato da API deprecata. Sembra che gli sviluppatori chiari abbiano deprecato questa api troppo presto. – Jeriho