суммировать и группировать несколько значений столбцов в одном запросе - PullRequest
0 голосов
/ 07 января 2020

Я хочу получить сводку по нескольким состояниям из одного столбца.

select c.brand
sum amount as total
from charges as c
where c.invoive_id is not null
and c.paid = true
group by c.brand

возвращает мне сумму всех завершенных покупок, сгруппированных по брендам. Я хочу иметь отдельный столбец в том же запросе, суммированный по бренду для "c .paid = false", поэтому у меня будет:

Brand     Total(true)    Total(false)
b_one         25             12
b_two         38             16

Ответы [ 3 ]

0 голосов
/ 07 января 2020

Похоже, у вас есть простой оператор условного агрегирования -

SELECT c.brand
      ,SUM(CASE WHEN c.paid = 'true' THEN amount END) as Total(true)
      ,SUM(CASE WHEN c.paid = 'false' THEN amount END) as Total(false)
from charges as c
where c.invoive_id is not null
group by c.brand
0 голосов
/ 07 января 2020

В базах данных, которые поддерживают логические типы, вы часто можете сделать:

select c.brand,
       sum(c.paid) as num_true,
       sum(not c.paid) as num_falst
from charges as c
where c.invoive_id is not null
group by c.brand
0 голосов
/ 07 января 2020

Вы не говорите, какую базу данных вы используете, поэтому я приму PostgreSQL. Обычно для этого можно использовать предложение CASE. Например:

select 
  c.brand,
  sum(case when c.paid then 1 else 0 end) as total_true,
  sum(case when c.paid then 0 else 1 end) as total_false
from charges as c
where c.invoive_id is not null
group by c.brand
...