【问题标题】:Subqueries, Having and GroupBy in SlickSlick 中的子查询、Having 和 GroupBy
【发布时间】:2017-11-13 21:13:34
【问题描述】:

我目前正在学习 Slick。我试图将此查询从 SQL 转换为 Scala:

SELECT name FROM Passenger
WHERE ID_psg in
(SELECT ID_psg FROM Pass_in_trip
GROUP BY place, ID_psg
HAVING count(*)>1)

但我只设法写了这样的东西,它给出了编译错误:

PassengerTable.table.filter(_.idPsg in (PassInTripTable.table.map(_.idPsgFk)))
  .filter(PassengerTable.table.count(_.name) > 1)
  .map(_.name)

我真的不知道如何在 Slick 中应用计数和查询。 因此,我将非常感谢您的帮助。

【问题讨论】:

    标签: sql scala aggregate slick


    【解决方案1】:

    试试

      val subquery = PassInTripTable.table.groupBy(p => (p.place, p.idPsgFk))
        .map { case ((place, id), group) => (id, group.length) }
        .filter { case (id, count) => count > 1 }
        .map { case (id, count) => id }
    
      val query = PassengerTable.table.filter(_.idPsg in subquery).map(_.name)
    
      val action = query.result
    
      db.run(action)
    

    http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#groupby

    http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#subquery

    http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#having

    【讨论】:

    • 非常感谢。特别是对于文档的链接:)
    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多