В oracle SQL, как рассчитать количество записей на основе условий - PullRequest
2 голосов
/ 29 января 2020

У меня есть таблица со следующей структурой:

Col2
A
A
B
B
E
E

Я хотел, чтобы запрос SQL вывел мне следующее:

Internal    4
External    2
Total   6

Logi c: если значения в Col2 - это A, B, тогда его следует суммировать как Internal. Если E, то его следует суммировать как External.

Ответы [ 5 ]

2 голосов
/ 29 января 2020

Чтобы отобразить значения столбца, используйте DECODE , просто предоставив список исходных и новых значений для столбца.

select decode(col2,'A','Internal','B','Internal','E','External') col from tab

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

with t as ( 
select decode(col2,'A','Internal','B','Internal','E','External') col from tab)
select nvl(col,'Total') col, count(*) cnt
from t
group by rollup (col)

Результат

COL             CNT
-------- ----------
External          2
Internal          4
Total             6
1 голос
/ 29 января 2020
select 'Internal' "summed up as"
       ,sum(case when Col2 in ('A', 'B') then 1
            else 0
            end) "sum"
from test
union
select 'External' "summed up as"
       ,sum(case when Col2 = 'E' then 1
            else 0
            end) "sum"
from test
union
select 'Total' "summed up as"
       , count(Col2) "sum"
from test;

Вот ДЕМО

1 голос
/ 29 января 2020

попробуйте, как показано ниже, используя union all и настройте группу

   select case when col2 in ('A','B') then 'Internal' else 'External' end,
    count(*) as result
   from table_name
   group by case when col2 in ('A','B') then 'Internal' else 'External' end
   union all
  select 'total', count(*) from table_name
1 голос
/ 29 января 2020
select sum(case when col2 in ('A', 'B') then 1 else 0 end) as internal,
       sum(case when col2 = 'E' then 1 else 0 end) as external,
       count(col2) as total
from your_table
0 голосов
/ 29 января 2020
select sum(Col2Count) as Internal from (SELECT Col2 as Col2, count( Col2 ) as Col2Count
FROM tablename group by Col2) where Col2 in (A,B);

Это даст вам результат как:

Внутренний 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...