为什么分组方法 sum in slick returns Option 即使用于 sum 的列是必填列?
Why grouping method sum in slick returns Option even if column used for sum is mandatory column?
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)
}
notice quantity is not null column, group.map(_.quantity).sum returns Rep[Option[Int]] 但不是 Rep[Int] why?
Slick 方法 sum
计算 Option[T]
,不应与 returns 非可选值的标准 Scala 集合方法 sum
混淆。
Slick 的 sum
是可选的,因为查询可能不会产生任何结果。也就是说,如果你 运行 SELECT SUM(column) FROM table
并且没有行,你不会从数据库中返回零。相反,您不会返回任何行。 Slick 与此行为一致。或者更确切地说:sum
发生在数据库服务器上的 SQL 中,并且在没有行时不会产生结果。
与数据库的工作方式相反,Scala 的 sum
确实允许您对空列表 (List[Int]().sum
) 求和并返回零。
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)
}
notice quantity is not null column, group.map(_.quantity).sum returns Rep[Option[Int]] 但不是 Rep[Int] why?
Slick 方法 sum
计算 Option[T]
,不应与 returns 非可选值的标准 Scala 集合方法 sum
混淆。
Slick 的 sum
是可选的,因为查询可能不会产生任何结果。也就是说,如果你 运行 SELECT SUM(column) FROM table
并且没有行,你不会从数据库中返回零。相反,您不会返回任何行。 Slick 与此行为一致。或者更确切地说:sum
发生在数据库服务器上的 SQL 中,并且在没有行时不会产生结果。
与数据库的工作方式相反,Scala 的 sum
确实允许您对空列表 (List[Int]().sum
) 求和并返回零。