| 220 | | create index idx_vozenje_inl_id on vozenje(inl_id); |
| 221 | | }}} |
| 222 | | }}} |
| 223 | | {{{#!div |
| 224 | | {{{#!sql |
| 225 | | create index idx_vozenje_pnl_id on vozenje(pnl_id); |
| 226 | | }}} |
| 227 | | }}} |
| 228 | | {{{#!div |
| 229 | | {{{#!sql |
| 230 | | create index idx_vozenje_patnik_k_id on vozenje(patnik_k_id); |
| 231 | | }}} |
| 232 | | }}} |
| 233 | | {{{#!div |
| 234 | | {{{#!sql |
| 235 | | create index idx_vozenje_hour on vozenje(extract(year from vozenje_start)); |
| | 224 | create index idx_vozenje_inl_id on vozenje(inl_id); - како резултат на join и inl_id foreign key |
| | 225 | }}} |
| | 226 | }}} |
| | 227 | {{{#!div |
| | 228 | {{{#!sql |
| | 229 | create index idx_vozenje_pnl_id on vozenje(pnl_id); - како резултат на join и pnl_id foreign key |
| | 230 | }}} |
| | 231 | }}} |
| | 232 | {{{#!div |
| | 233 | {{{#!sql |
| | 234 | create index idx_vozenje_patnik_k_id on vozenje(patnik_k_id); - како резултат на join и patnik_k_id foreign key |
| | 235 | }}} |
| | 236 | }}} |
| | 237 | {{{#!div |
| | 238 | {{{#!sql |
| | 239 | create index idx_vozenje_hour on vozenje(extract(year from vozenje_start)); - како резултат на честото групирање и сортирање по година изведено од датумот на започнато возење |
| | 525 | |
| | 526 | = Релациона алгебра = |
| | 527 | |
| | 528 | === 1. Број казнети според линија секоја година === |
| | 529 | |
| | 530 | {{{#!div |
| | 531 | {{{#!sql |
| | 532 | τ_{godina, linija.li_ime} ( |
| | 533 | π_{godina, linija.li_ime, broj_kazni} ( |
| | 534 | γ_{EXTRACT_YEAR(kazna.kz_datum) → godina, linija.li_ime; COUNT(*) → broj_kazni} ( |
| | 535 | linija ⨝ istanca_na_linija ⨝ kontroli ⨝ kazna |
| | 536 | ) |
| | 537 | ) |
| | 538 | ) |
| | 539 | }}} |
| | 540 | }}} |
| | 541 | |
| | 542 | === 2. Најголем број возења по интервал од 1 час според линија за секоја година === |
| | 543 | |
| | 544 | {{{#!div |
| | 545 | {{{#!sql |
| | 546 | τ_godina ( |
| | 547 | π_godina, li_ime, interval_1h, broj_vozenja ( |
| | 548 | |
| | 549 | σ_(godina, li_ime, broj_vozenja) ∈ ( |
| | 550 | π_godina, li_ime, max_broj_vozenja ( |
| | 551 | γ_godina, li_ime; MAX(broj_vozenja) → max_broj_vozenja ( |
| | 552 | γ_EXTRACT_YEAR(v.vozenje_start)::int → godina, |
| | 553 | li.li_ime, |
| | 554 | TO_CHAR(EXTRACT(HOUR FROM v.vozenje_start), '00') || ':00 - ' || |
| | 555 | TO_CHAR(EXTRACT(HOUR FROM (v.vozenje_start + INTERVAL '1 hour')), '00') || ':00' |
| | 556 | → interval_1h; |
| | 557 | COUNT(*) → broj_vozenja ( |
| | 558 | Linija ⨝ InstancaNaLinija ⨝ Vozenje |
| | 559 | ) |
| | 560 | ) |
| | 561 | ) |
| | 562 | ) |
| | 563 | ) ( |
| | 564 | γ_EXTRACT_YEAR(v.vozenje_start)::int → godina, |
| | 565 | li.li_ime, |
| | 566 | TO_CHAR(EXTRACT(HOUR FROM v.vozenje_start), '00') || ':00 - ' || |
| | 567 | TO_CHAR(EXTRACT(HOUR FROM (v.vozenje_start + INTERVAL '1 hour')), '00') || ':00' |
| | 568 | → interval_1h; |
| | 569 | COUNT(*) → broj_vozenja ( |
| | 570 | Linija ⨝ InstancaNaLinija ⨝ Vozenje |
| | 571 | ) |
| | 572 | ) |
| | 573 | ) |
| | 574 | ) |
| | 575 | }}} |
| | 576 | }}} |
| | 577 | |
| | 578 | === 3. Профит од казни и билети за секоја година === |
| | 579 | |
| | 580 | {{{#!div |
| | 581 | {{{#!sql |
| | 582 | τ_godina ( |
| | 583 | γ_godina; SUM(COALESCE(kz_iznos,0)) + SUM(COALESCE(tb_cena,0)) → vkupen_promet ( |
| | 584 | ( |
| | 585 | π_EXTRACT_YEAR(kz.kz_datum)::int → godina, |
| | 586 | kz.kz_iznos, |
| | 587 | NULL → tb_cena ( |
| | 588 | σ_kz.kz_plateno = true ∧ kz.kz_datum IS NOT NULL ∧ kz.kz_datum_plateno IS NOT NULL ∧ |
| | 589 | EXTRACT(YEAR FROM kz.kz_datum) = EXTRACT(YEAR FROM kz.kz_datum_plateno) (Kazna) |
| | 590 | ) |
| | 591 | ) |
| | 592 | ∪ |
| | 593 | ( |
| | 594 | π_EXTRACT_YEAR(b.b_datum_na_kupuvanje)::int → godina, |
| | 595 | NULL → kz_iznos, |
| | 596 | tb.tb_cena ( |
| | 597 | (Bilet ⨝ TipBilet) |
| | 598 | ) |
| | 599 | ) |
| | 600 | |
| | 601 | ) |
| | 602 | ) |
| | 603 | }}} |
| | 604 | }}} |