Объединить строки, чтобы выбрать столбец - PullRequest
0 голосов
/ 24 марта 2020

У меня есть такая таблица

books
|---------------------|------------------|------------------|------------------|
|         book        |       source     |    store_price   |  bookstore_price |
|---------------------|------------------|------------------|------------------|
|        Batman       |       store      |       10.5       |        9.5       |
|---------------------|------------------|------------------|------------------|
|       Superman      |     bookstore    |       null       |         9        |
|---------------------|------------------|------------------|------------------|

Мне нужно выбрать книги и суммировать цены, и мой запрос пока выглядит следующим образом

SELECT
    book,
    SUM(
        CASE
            WHEN source = 'store' then store_price
            WHEN source = 'bookstore' then bookstore_price
        END
    ) AS price
FROM books
GROUP BY 1
;

Можно ли как-то оптимизировать SUM выберите для отл. select source||'_price' from books;?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Я не уверен на 100%, поможет ли это, но вы можете отключить данные и агрегировать:

select b.book, sum(v.price)
from books b join lateral
     (values ('store', store_price),
             ('bookstore', bookstore_price)
     ) v(source, price)
     on v.source = b.source
group by b.book;
0 голосов
/ 24 марта 2020

Вы можете использовать функцию COALESCE :

SELECT
    book,
    source,
    SUM(
        COALESCE(store_price,bookstore_price,0)
    ) AS price
FROM books
GROUP BY 1
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...