= Преглед: v_company_billing_overview = ||= Својство ||= Вредност || || Шема || `kbnteam` || || Категорија || Фактурирање || || Индексна поддршка || Постоечка индексна поддршка || == Опис == За секоја фактура ги прикажува компанијата, доставата, бројот на клиентски нарачки, нивниот вкупен износ и бројот на договори на компанијата. Износот на фактурата е збир од поврзаните клиентски нарачки. Бројот на договори се пресметува одделно. Фактурите без клиентски нарачки имаат број и износ еднакви на нула. Еден ред за секоја фактура. Износот е збир од нарачките, а не пресметка на платено или преостанато салдо. == Зависности == ||= Табела / преглед ||= Употреба || || `kbnteam.contract` || Договори меѓу компаниите и рестораните. || || `kbnteam.invoice` || Фактури поврзани со компаниските нарачки. || || `kbnteam.company_order` || Поврзување на компаниските нарачки со компанијата и доставата. || || `kbnteam.company` || Податоци за компаниите. || || `kbnteam.customer_order` || Клиентски нарачки, датуми, статуси и износи. || == Излезни колони == ||= Колона ||= Извор / пресметка ||= Опис || || `invoice_id` || `invoice.invoice_id` || Идентификатор на фактурата. || || `comp_order_id` || `invoice.comp_order_id` || Идентификатор на компаниската нарачка. || || `company_id` || `company.company_id` || Идентификатор на компанијата. || || `company_name` || `company.company_name` || Назив на компанијата. || || `company_address` || `company.company_address` || Адреса на компанијата. || || `delivery_id` || `company_order.delivery_id` || Идентификатор на доставата. || || `customer_order_count` || `COUNT(customer_order.order_id)` || Број на клиентски нарачки. || || `invoice_amount` || `COALESCE(SUM(customer_order.order_total), 0)::numeric(14,2)` || Збир на износите на нарачките поврзани со фактурата. || || `contract_count` || `COALESCE(company_contracts.contract_count, 0)` || Број на договори на компанијата. || == SQL дефиниција == {{{ #!sql CREATE OR REPLACE VIEW kbnteam.v_company_billing_overview AS WITH company_contracts AS ( SELECT company_id, COUNT(*) AS contract_count FROM kbnteam.contract GROUP BY company_id ) SELECT i.invoice_id, i.comp_order_id, cmp.company_id, cmp.company_name, cmp.company_address, co.delivery_id, COUNT(o.order_id) AS customer_order_count, COALESCE(SUM(o.order_total), 0)::numeric(14,2) AS invoice_amount, COALESCE(cc.contract_count, 0) AS contract_count FROM kbnteam.invoice i JOIN kbnteam.company_order co ON co.comp_order_id = i.comp_order_id JOIN kbnteam.company cmp ON cmp.company_id = co.company_id LEFT JOIN kbnteam.customer_order o ON o.comp_order_id = co.comp_order_id LEFT JOIN company_contracts cc ON cc.company_id = cmp.company_id GROUP BY i.invoice_id, i.comp_order_id, cmp.company_id, cmp.company_name, cmp.company_address, co.delivery_id, cc.contract_count; }}} == Индексна поддршка == За овој поглед не се додава посебна група индекси. Постоечката индексна поддршка е доволна за тестираните прашалници. Индексите на заедничките табели можат да се користат и од други погледи. == Тестирање на перформанси == === SELECT === Времето на извршување на SELECT прашалникот е прифатливо за редовното користење на погледот. Постоечката индексна поддршка е доволна за тестираните прашалници. === INSERT и UPDATE === Тестирани се по еден INSERT и еден UPDATE врз `kbnteam.invoice`, главната табела на погледот. Се тестира додавање фактура и промена на поврзаната компаниска нарачка. ||= Операција ||= Execute (ms) ||= Fetch (ms) ||= Вратени редови || || INSERT || 14 || 13 || 1 || || UPDATE || 16 || 14 || 1 || Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди. Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK. INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.