课程表

Slick课程

工具箱
速查手册

Slick 查询(二)

当前位置:免费教程 » 数据库/运维 » Slick

查询(二)

Union

两个查询的结果可以通过 ++ (或者 unionAll ) 和 union 操作联合起来:

  1. val q1= Album.filter(_.artistid <10)
  2. val q2 = Album.filter(_.artistid > 15)
  3. val unionQuery = q1 union q2
  4. val unionAllQuery = q1 ++ q2

union 操作会去掉重复的结果,而 unionAll 只是简单的把两个查询结果连接起来(通常来说比较高效)。

Aggregation

和 SQL 一样,Slick 也有 min,max,sum,avg 等集合操作

  1. val q = Album.map(_.artistid)
  2. val q1 = q.max
  3. val q2 = q.min
  4. val q3 = q.avg
  5. val q4 = q.sum

注意:这里 q.max,min,avg,sum 返回结果类型为 Column[Option[T]],要得到最好的 scalar 类型的值 T,可以调用 run,得到 Option[T],然后再调用 Option 的 get 或 getOrDefault,比如:

  1. val q = Album.map(_.artistid)
  2. val q1 = q.max
  3. println(q1.run.get)

得到打印的结果:275

其它的 Aggregation 操作还有 length,exists,比如:

  1. val q1 = Album.length
  2. val q2 = Album.exists

分组使用 groupBy 操作,类似于 Scala 集合类型的 groupBy 操作:

  1. val q= (for {
  2. a <- Album
  3. b <- Artist
  4. if a.artistid === b.artistid
  5. } yield (b.artistid,b.name)
  6. ).groupBy(_._2)
  7. val q1 = q.map { case (name, records) =>
  8. (records.map(_._1).avg, name,records.length)}
  9. q1 foreach println

这段代码使用两个查询,给出 Album 根据艺术家出的专辑的统计,其中中间查询 q,包含一个嵌套的 Query,目前 Scala 不支持直接查询嵌套的 Query,因此我们需要分两次查询,打印出的部分结果如下:

  1. (Some(230),Some(Aaron Copland & London Symphony Orchestra),1)
  2. (Some(202),Some(Aaron Goldberg),1)
  3. (Some(1),Some(AC/DC),2)
  4. (Some(214),Some(Academy of St. Martin in the Fields & Sir Neville Marriner),1)
  5. (Some(215),Some(Academy of St. Martin in the Fields Chamber Ensemble & Sir Neville Marriner),1)
  6. (Some(222),Some(Academy of St. Martin in the Fields, John Birch, Sir Neville Marriner & Sylvia McNair),1)
  7. (Some(257),Some(Academy of St. Martin in the Fields, Sir Neville Marriner & Thurston Dart),1)
  8. (Some(2),Some(Accept),2)
  9. (Some(260),Some(Adrian Leaper & Doreen de Feis),1)
  10. (Some(3),Some(Aerosmith),1)
  11. (Some(197),Some(Aisha Duo),1)
  12. (Some(4),Some(Alanis Morissette),1)
  13. (Some(206),Some(Alberto Turco & Nova Schola Gregoriana),1)
  14. (Some(5),Some(Alice In Chains),1)
  15. (Some(252),Some(Amy Winehouse),2)
  16. ...
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号