Scala + Slick - Groupby 결과에 대한 수를 얻습니다
문제
가드 + Scala + Slick 코드에서 GroupBy를 사용하여 DB에서 카운트를 가져 오려고합니다.
여기에 내 부분 코드가 있습니다 :
object DBJobs extends Table[DBJob]("encoder_job") {
object Status extends Enumeration {
val local = Value("LOCAL")
val encoding = Value("ENCODING")
val done = Value("DONE")
val error = Value("ERROR")
}
implicit val StatusMapper = MappedTypeMapper.base[Status.Value, String] (
{x => x.toString},
{x => x match {case "LOCAL"=>Status(0);case "ENCODING"=>Status(1);case "DONE"=>Status(2);case "ERROR"=>Status(3)}}
)
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def status = column[DBJobs.Status.Value]("status", O.NotNull)
def getStats()(implicit session:Session):mutable.Map[Status.Value, Int] = {
var map = mutable.Map[Column[Status.Value], Column[Int]]()
val q = (for { j <- DBJobs } yield (j)).groupBy(_.status).map{
case (s, results) =>
map = map += (s -> results.length)
}
map
}
}
.
내 문제는 [column [status.value], column [int]] 대신 [dbjobs.status, int] 로서 데이터를 내 맵에 넣는 방법입니다..
여기에 SQL이 해당합니다.
SELECT COUNT( 1 ), status FROM encoder_job GROUP BY STATUS
.
매끄러운 버전 : 1.0.1
감사합니다
해결책
def getStats()(implicit session:Session):mutable.Map[Status.Value, Int] = {
Query(DBJobs).groupBy(_.status).map{
case (s, results) => (s -> results.length)
}
}
// usage
val results = getStats.run
.
테이블 오브젝트의 메소드를 직접 처리 할 수 없으면 Slick 2.0으로 쉽게 마이그레이션 할 수 없습니다.그들을 분리, 예를 들어.방법 확장자로서.또한 https://groups.google.com/d/msg/scalaquery/xntpt6sexxi를 참조하십시오/ zlkgxv6lz6yj
제휴하지 않습니다 StackOverflow