MYSQL にこのようなテーブルがあります。
create table Employee(
id tinyint,
name char(36),
is_permanent tinyint,
company_name char(36),
designation Char(36),
primary key (id)
);
Quill SQL を使用して、このテーブルに SELECT クエリを記述したいと考えています。
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 句でフィルタされたカウントを計算する方法は正しいですか? いいえの場合、他の方法はありますか?