У меня есть класс сотрудника.
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, и основной запрос, который просто выбирает запись из Основной запрос.
Я хочу избавиться от этого и сделать все за один запрос. Есть ли способ сделать это ??