У меня есть такая таблица в MYSQL.
create table Employee(
id tinyint,
name char(36),
is_permanent tinyint,
company_name char(36),
designation Char(36),
primary key (id)
);
, и я хочу написать запрос SELECT для этой таблицы с помощью Quill SQL.
select count(1), sum((case when (`designation` = 'software') then 1 else 0 end)) from employee group by company_name;
Я написал модель и
case class Employee(id: Int,
name: String,
is_permanent: Boolean,
company_name: String,
designation: Designation)
trait Designation {
val value: String
}
case object SoftwareEngineer extends Designation {
override val value: String = "software"
}
case object MechanicalEngineer extends Designation {
override val value: String = "mechanical"
}
Мой запрос с использованием гусиного шва
ctx.run {
query[Employee].groupBy(_.company_name).map {
case (compName, employeeTable) =>
(employeeTable.size,
employeeTable.filter(_.designation == lift(SoftwareEngineer)).size,
compName)
}
}
, где ctx
- это контекст пера.
Однако компилятор показывает ошибку, что
exception during macro expansion:
[error] java.lang.IllegalStateException: Invalid group by aggregation: 'x48.filter(x49 =>
x49.designation == ?).size'
Правильно ли рассчитан отфильтрованный счет в выражении group by? Если нет, есть ли другой способ сделать это?