Почему метод группировки sum в slick возвращает Option, даже если столбец sum является обязательным столбцом? - PullRequest
2 голосов
/ 06 января 2020
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 (_. Amount) .sum возвращает Rep [Option [Int]], но не Rep [Int], почему?

1 Ответ

3 голосов
/ 04 марта 2020

Метод Slick sum оценивает Option[T], и его не следует путать со стандартным Scala коллекционным методом sum, который возвращает необязательное значение.

Slick's sum is необязательно, потому что запрос может не дать результатов. То есть, если вы запустите SELECT SUM(column) FROM table, а строк нет, вы не получите ноль из базы данных. Вместо этого вы не получите никаких строк. Слик соответствует этому поведению. Или скорее: sum происходит в SQL на сервере базы данных и не дает результата, когда нет строк.

В отличие от способа работы базы данных, Scala sum позволяет суммировать пустой список (List[Int]().sum) и возвращать ноль.

...