scala - 为什么即使用于 sum 的列是强制列,slick 中的分组方法 sum 也会返回 Option?

标签 scala slick slick-3.0

CREATE TABLE orders
(
    id bigint NOT NULL,
    ...
    created_on date NOT NULL,
    quantity int NOT NULL,
    ...
    CONSTRAINT orders_pkey PRIMARY KEY (id)
)
SELECT DATE(o.created_on) AS date, sum(quantity)
FROM orders o
GROUP BY date
ordersItemsQuery.groupBy(_.createdOn).map{
   case (created, group) => (created, group.map(_.quantity).sum)
}

注意到数量不是空列,group.map(_.quantity).sum 返回 Rep[Option[Int]] 而不是 Rep[Int],为什么?

最佳答案

Slick 方法 sum评估Option[T] ,并且不应与标准 Scala 集合方法 sum 混淆返回一个非可选值。

光滑的sum是可选的,因为查询可能不会产生任何结果。也就是说,如果您运行 SELECT SUM(column) FROM table并且没有行,您不会从数据库中返回零。相反,您不会返回任何行。 Slick 与这种行为是一致的。或者更确切地说:sum发生在数据库服务器上的 SQL 中,并且当没有行时不会产生结果。

与数据库的工作方式相比,Scala 的 sum确实允许您对空列表( List[Int]().sum )求和并返回零。

关于scala - 为什么即使用于 sum 的列是强制列,slick 中的分组方法 sum 也会返回 Option?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59612839/

相关文章:

scala - 在scala中的自定义控制结构中声明变量

mysql - Play 2.5 依赖注入(inject)实现流畅的数据库配置

Slick 3.0 记录查询性能

postgresql - 在 Slick 中添加评论

scala - 执行批量插入 slick 3.x 时如何省略列值?

mysql - 有条件地删除光滑的表

scala - 无法访问伴随对象的字段

scala - 如何从 Spark ML 随机森林中获取对应于类的概率

postgresql - Slick 2 发电机 : tables with same names on different schemas

scala - 使用可选列更新 Scala Slick 行