Scala Slick无法将查询与count联合起来

时间:2017-01-18 19:30:21

标签: scala slick

我有两个Slick个问题,通过过滤器返回count,它们看起来像这样:

val firstCount = query.filter(_.someCond).length
val secondCount = query.filter(_.someCond).length
val unionCount = firstCount union secondCount //Place with the problem

Slick可以为没有计数的单个查询建立联合 - 返回Rep[Int]而不是QueruBase

我的目标是在一次SQL查询期间采用firstCountsecondCount

1 个答案:

答案 0 :(得分:0)

哦,小伙子,我可以看到你不会喜欢这个,但这是我在没有经过长时间调查的情况下弄明白的唯一方法。

这是一个解决方法而不是解决方案。 @ insan-e解决方案(简单地使用两个查询)实际上可能更可行(恕我直言 - 但我不知道你的约束)

以下是查询:

    TABLE1
      .filter(_.someColumn === "1stFilterValue") // your filter basically
      .map(_ => LiteralColumn(1))
      .union {
        TABLE2
          .filter(_.someColumn === "2ndFilterValue") // again your filter
          .map(_ => LiteralColumn(2))
      }.groupBy { marker =>
        marker
      }.map { case (marker, grouped) =>
        (marker, grouped.length)
      }

这将产生以下查询(假设我有列name - 用于过滤):

select x2, count(1) 
from (
    select 1 as x2 
    from "TABLE1" 
    where "NAME" = 'Mike' 
    union 
    select 2 as x2 
    from "TABLE2" 
    where "NAME" = 'Tom'
 ) 
 group by x2

这将返回以下结果:

DEBUG s.j.J.benchmark - Execution of prepared statement took 50ms
DEBUG s.j.S.result - /----+----------\
DEBUG s.j.S.result - | 1  | 2        |
DEBUG s.j.S.result - | X2 | COUNT(1) |
DEBUG s.j.S.result - |----+----------|
DEBUG s.j.S.result - | 1  | 1        |
DEBUG s.j.S.result - | 2  | 1        |
DEBUG s.j.S.result - \----+----------/

请记住,如果特定行的计数等于0(无行),则特定行不会出现在结果中。您需要在代码中处理此问题!