sql >> Databasteknik >  >> RDS >> PostgreSQL

Funktion i PostgreSQL för att infoga från en tabell till en annan?

Du kan lösa det här problemet i ren SQL, du behöver ingen funktion för detta.

Det bästa är att dela upp insamlingen av statistik i två distinkta frågor, en för när laget spelar hemma, en när de spelar borta. Räkna ut poängen och gjorda mål för varje spel. Sedan UNION dessa två frågor och använd den som en underfråga för att beräkna den övergripande statistiken:

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;

Detta är inte särskilt snabbt på grund av CASE uttalanden, men det kommer att gå snabbare än att använda en procedur och en loop.

Istället för att lägga in resultatet av denna fråga i en tabell, skulle jag föreslå att du CREATE VIEW general AS ... med ovanstående fråga. I så fall får du alltid de senaste resultaten när du SELECT * FROM general och du behöver inte TRUNCATE den allmänna tabellen innan du kör frågan (att lägga till nya resultat med data i tabellen kommer att bryta mot PK-begränsningen). Om du verkligen behöver tabellen, använd SELECT ... INTO general FROM ... i frågan ovan.




  1. kan inte starta MySql i Mac OS 10.6 Snow Leopard

  2. MariaDB sammansatta datum- och tidsenheter förklaras

  3. Upptäcka cirkulära referenser i SQL

  4. Cloud SQL eller VM Instance för att vara värd för MySQL Database