Order by в Quill SQL производит подзапрос - PullRequest
1 голос
/ 17 января 2020

У меня есть класс сотрудника.

 case class Employee(name: String, age: Int, company: String)

, и я пишу запрос Group-By в Quill.

val q = quote {
     query[Employee]
     .filter(_.age == lift(100))
     .groupBy(_.company)
     .map { a =>
      val tot = a._2.size
      val totCond = (a._2.map { i =>
        if (i.name == "software") 1 else 0
      }.sum)
      (tot, totCond)
    }
}

ctx.run(q)

Этот запрос переводится как

SELECT COUNT(*), SUM(CASE WHEN x36.name = 'software' THEN 1 ELSE 0 END) FROM employee x36 
WHERE x36.age = ? GROUP BY x36.company

это нормально.

Теперь я хочу отсортировать запрос как

  quote {
   query[Employee]
     .filter(_.age == lift(100))
     .groupBy(_.company)
     .map { a =>
       val tot = a._2.size
       val totCond = (a._2.map { i =>
         if (i.name == "software") 1 else 0
       }.sum)
       (tot, totCond)
     }.sortBy(_._1)(Ord.desc)
 }

But this translates to 

 SELECT x36._1, x36._2 FROM (SELECT COUNT(*) AS _1, SUM(CASE WHEN x36.name = 'software' THEN 1 
 ELSE 0 END) AS _2 FROM employee x36 WHERE x36.age = ? GROUP BY x36.company) AS x36 ORDER BY 
 x36._1 DESC

, это выглядит как подзапрос, который выполняет все логи c, и основной запрос, который просто выбирает запись из Основной запрос.

Я хочу избавиться от этого и сделать все за один запрос. Есть ли способ сделать это ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...