Я пишу запрос в Postgres с использованием фильтра в статусе (например, «ВВЕРХ» и «ВНИЗ»), и это работает нормально. Я просто хочу написать тот же запрос в Oracle. У меня есть значения UP и DOWN в одном и том же столбце Status. Я просто хочу подсчитать общее количество статусов Up и Down, а также общее количество результатов Apps. Я хочу, чтобы в этом столбце псевдонима было три значения общего количества: Tot_App_Name, Status_Up_count, Status_down_count. Как мне это сделать?
Стол:-
CREATE TABLE Application_Status
(
App_Category VARCHAR (45) NULL,
App_Name VARCHAR (40) NULL,
DB_name VARCHAR (40) NULL,
Server VARCHAR (200) NULL,
Provider VARCHAR (250) NULL,
Status VARCHAR (10) NULL,
Last_Refresh TIMESTAMP NULL
)
Вставленные значения: -
insert into Application_Status values('app1','abc1','abcd1','abcd1','url11','Up',CURRENT_TIMESTAMP);
insert into Application_Status values('app2','abc2','abcd2','abcd2','url12','Up',CURRENT_TIMESTAMP);
insert into Application_Status values('app3','abc3','abcd3','abcd3','url13','down',CURRENT_TIMESTAMP);
insert into Application_Status values('app4','abc4','abcd4','abcd4','url14','down',CURRENT_TIMESTAMP);
insert into Application_Status values('app5','abc5','abcd5','abcd5','url15','Up',CURRENT_TIMESTAMP);
Постгресс-запрос (хотите преобразовать в оракул): -
select count(*) as "Tot_App_Name",count(*) filter (where "Status"= 'UP') as "Status_Up_count",
count(*) filter (where "Status"= 'DOWN') as "Status_Down_count" from "ApplicationStatus"."ApplicationStatus";
Select * from "Application_Status"."Application_Status";
Ожидаемый результат:-
Tot_App_Name Status_Up_count Status_Down_count
5 3 2
Вот один из вариантов:
select
count(*) tot_app_name,
sum(case when status = 'UP' then 1 else 0 end) status_up_count,
sum(case when status = 'DOWN' then 1 else 0 end) status_down_count
from application_status;
Должен признаться, я не знаю синтаксиса filter( ... ). В стандартном SQL вы бы сделали это так:
SELECT --place the colums you want to select here
FROM -- place the tables here
WHERE -- place the conditions for here; this is the filtering part