Oracle
 sql >> Database >  >> RDS >> Oracle

raccolta di dati annuali aggregati per un rapido accesso successivo

Una vista materializzata sarebbe un'ottima opzione per quello che stai cercando di fare. In questo modo puoi scrivere la query una volta per la vista, quindi fare in modo che i dati nella vista materializzata vengano aggiornati tutte le volte che vuoi. Puoi avere un lavoro che aggiorna i dati una volta a notte, nei fine settimana o con qualsiasi frequenza tu scelga.

Dopo aver creato la vista materializzata, puoi anche aggiungere indici sopra la vista materializzata per assistere con le prestazioni della query, se lo desideri.

Di seguito è riportato un rapido esempio su come creare una vista materializzata.

CREATE TABLE sale
(
    product_id     NUMBER,
    sale_date      DATE,
    sale_amount    NUMBER
);

INSERT INTO sale (product_id, sale_date, sale_amount)
     VALUES (124, DATE '2019-02-01', 40.25);

INSERT INTO sale (product_id, sale_date, sale_amount)
     VALUES (124, DATE '2019-02-01', 80.99);

INSERT INTO sale (product_id, sale_date, sale_amount)
     VALUES (124, DATE '2020-02-01', 30.50);

INSERT INTO sale (product_id, sale_date, sale_amount)
     VALUES (124, DATE '2020-02-01', 46.75);

CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
AS
      SELECT product_id,
             SUM (sale_amount)                 AS annual_sales,
             MAX (sale_amount)                 AS max_price,
             MIN (sale_amount)                 AS min_price,
             EXTRACT (YEAR FROM sale_date)     AS year
        FROM sale
    GROUP BY product_id, EXTRACT (YEAR FROM sale_date);

Risultato

select * from sales_summary;

   PRODUCT_ID    ANNUAL_SALES    MAX_PRICE    MIN_PRICE    YEAR
_____________ _______________ ____________ ____________ _______
          124          121.24        80.99        40.25    2019
          124           77.25        46.75         30.5    2020