sql >> Databáze >  >> RDS >> PostgreSQL

Funkce v PostgreSQL pro vkládání z jedné tabulky do druhé?

Tento problém můžete vyřešit v čistém SQL, nepotřebujete k tomu žádnou funkci.

Nejlepší je rozdělit sbírku statistik na dva různé dotazy, jeden pro to, kdy tým hraje doma, a jeden, když hraje venku. Pro každou hru spočítejte body a vstřelené branky. Poté UNION tyto dva dotazy a použijte je jako dílčí dotaz k výpočtu celkových statistik:

SELECT
  eq.nom_equipo AS equipo,
  COUNT(p.*) AS partidos_jug,
  SUM(CASE WHEN p.puntos = 3 THEN 1 ELSE 0 END) partidos_gana,
  SUM(CASE WHEN p.puntos = 1 THEN 1 ELSE 0 END) partidos_emp,
  SUM(CASE WHEN p.puntos = 0 THEN 1 ELSE 0 END) partidos_perd,
  SUM(p.puntos) AS puntos,
  SUM(p.goles) AS goles_favor
FROM equipos eq
JOIN (
  -- Playing at home
  SELECT
    num_eqpo_loc AS eqpo, 
    CASE WHEN (goles_loc > goles_vis) THEN 3
         WHEN (goles_loc = goles_vis) THEN 1
         ELSE 0
    END AS puntos,
    goles_loc AS goles
  FROM partidos
  UNION
  -- Playing away
  SELECT
    num_eqpo_vis AS eqpo, 
    CASE WHEN (goles_vis > goles_loc) THEN 3
         WHEN (goles_vis = goles_loc) THEN 1
         ELSE 0
    END AS puntos,
    goles_vis AS goles
  FROM partidos) AS p ON p.eqpo = eq.num_eqpo
GROUP BY equipo
ORDER BY puntos DESC, partidos_jug ASC, goles_favor DESC;

To není příliš rychlé kvůli CASE příkazy, ale bude to rychlejší než použití procedury a smyčky.

Místo vložení výsledku tohoto dotazu do tabulky bych navrhoval, abyste CREATE VIEW general AS ... s výše uvedeným dotazem. V takovém případě vždy získáte nejnovější výsledky, když SELECT * FROM general a nemusíte TRUNCATE obecnou tabulku před spuštěním dotazu (přidání nových výsledků s daty v tabulce poruší omezení PK). Pokud tabulku opravdu potřebujete, použijte SELECT ... INTO general FROM ... v dotazu výše.




  1. Django+Postgres:aktuální transakce je přerušena, příkazy ignorovány až do konce bloku transakce

  2. Jak převést řetězec na datum v PostgreSQL

  3. Rails 4 LIKE dotaz - ActiveRecord přidává uvozovky

  4. Použití Jquery Ajax k načtení dat z Mysql