Как подсчитать результаты с помощью фильтра с помощью Slick?

У меня возникла проблема, которую я хотел бы упростить: (совершенно верно, я делаю это неправильно на самом деле).

Требуются

Я хотел бы подсчитать количество пользователей, имеющих id = 1. На языке SQL скажем, что это примерно так:

SELECT COUNT(*) FROM users WHERE id = 1

Код

Я использую Slick в форме "поднял", поэтому вот мой фрагмент кода, подсчитывающий пользователей:

Query(Users.where( _.id === 1).length).first

Фактически, что происходит здесь, это то, что Slick alias ScalaQuery фактически создает подзапрос с причиной фильтра и затем подсчитывает результаты подпроса.

SELECT COUNT(*) FROM (SELECT * FROM users WHERE id = 1))

Похоже на довольно большие накладные расходы для такого запроса.

Ответ 1

Не уверен, что это изменилось с ScalaQuery на Slick, но попробуйте:

val q = for{ 
  id <- Parameters[Int]
  t <- tableObject if t.id is id
} yield t.id.count

val cnt = q(someID).firstOption getOrElse 0