sql >> Databasteknik >  >> RDS >> Oracle

samla in årliga aggregerade data för senare snabb åtkomst

En materialiserad vy skulle vara ett bra alternativ för det du vill göra. På så sätt kan du skriva frågan en gång för vyn och sedan få data i den materialiserade vyn att uppdatera så ofta du vill. Du kan ha ett jobb som uppdaterar data en gång per natt, på helgerna eller vilken frekvens du än väljer.

När den materialiserade vyn har skapats kan du också lägga till index ovanpå den materialiserade vyn för att hjälpa till med frågeprestanda om du så vill.

Ett snabbt exempel på hur man skapar en materialiserad vy kan ses nedan.

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);

Resultat

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



  1. Vad är en markör i SQL och hur implementerar man den?

  2. ORA-28040:Inget matchande autentiseringsprotokoll

  3. MySQL Kontrollera om tabellen finns fel

  4. Postgresql:hur skapar man en tabell endast om den inte redan finns?