26
如何使聚合我想迫使光滑像用油滑
select max(price) from coffees where ...
但slick's documentation創建查詢不利於
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
由於這些Q1-Q4都沒有問題,我可以不會得到結果,但可以在其他查詢中使用它們。
本聲明
for {
coffee <- Coffees
} yield coffee.price.max
產生正確的查詢,但不建議(產生的警告: 「在課堂上ColumnExtensionMethods方法Max已經過時:使用Query.max而不是」)。 如何在沒有警告的情況下生成這樣的查詢?
的另一個問題是通過用組聚集:
"select name, max(price) from coffees group by name"
試圖與
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
產生
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
這會導致明顯的分貝錯誤來解決它
column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
如何生成這樣的查詢?
,而不是'.list.head'你可以做'.first',IIRC – 2013-03-04 10:41:35
謝謝,我在回答中更改了 – EECOLOR 2013-03-04 11:43:56
謝謝,這兩個例子都工作,第二生成最佳查詢「,從」coffees「x2組中選擇x2。」COF_NAME「,max(x2。」PRICE「)x2。」COF_NAME「」,但第一個生成「select x2.x3 from(select max(x4。 (選擇x6。「PRICE」as x5 from「coffees」x6)x4)x2「 - 用2個子查詢進行查詢而不是簡單的」select「max(x2。」PRICE「)from」coffees「x2」由不推薦的api生成。看起來,華而不實的開發人員過早地棄用了這個API。 – Jeriho 2013-03-04 20:40:37