在SLICK 2.0中聚合多列而不分组By [英] Aggregate multiple columns without groupBy in Slick 2.0
本文介绍了在SLICK 2.0中聚合多列而不分组By的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用执行SQL的SLICK执行聚合,如下所示:
SELECT MIN(a), MAX(a) FROM table_a;
其中table_a
有INT
列a
在SLICK中,给定表定义:
class A(tag: Tag) extends Table[Int](tag, "table_a") {
def a = column[Int]("a")
def * = a
}
val A = TableQuery[A]
val as = A.map(_.a)
我似乎有两个选择:
写下这样的内容:
Query(as.min, as.max)
写些类似的东西:
as .groupBy(_ => 1) .map { case (_, as) => (as.map(identity).min, as.map(identity).max) }
select min(x2."a"), max(x2."a") from "table_a" x2 group by 1
然而,这种语法对于postgres是不正确的(它按第一个列值分组,在本例中是无效的)。事实上,除非省略GROUP BY子句,否则无法在postgres中按常量值进行分组。
有没有办法使SLICK在没有GROUP BY
的情况下使用两个聚合发出单个查询?
推荐答案
语法错误是错误。我创建了一个票证:https://github.com/slick/slick/issues/630 在这种情况下,子查询是SLICK的SQL编译器当前生成非最佳代码的限制。我们正在努力改善这种情况。
作为一种解决办法,下面是一个模式,它可以在幕后调出生成的SQL并保持其他所有内容不变:https://gist.github.com/cvogt/8054159
这篇关于在SLICK 2.0中聚合多列而不分组By的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文