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/