sql >> Database teknologi >  >> RDS >> PostgreSQL

Funktion i PostgreSQL til at indsætte fra en tabel til en anden?

Du kan løse dette problem i ren SQL, du behøver ikke en funktion til dette.

Det bedste er at dele indsamlingen af ​​statistikker op i to forskellige spørgsmål, en for hvornår holdet spiller hjemme, en når de spiller ude. For hvert spil udregn pointene og de scorede mål. Derefter UNION disse to forespørgsler og brug det som en underforespørgsel til at beregne den overordnede 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;

Dette er ikke specielt hurtigt på grund af CASE sætninger, men det vil være hurtigere end at bruge en procedure og en loop.

I stedet for at indsætte resultatet af denne forespørgsel i en tabel, vil jeg foreslå, at du CREATE VIEW general AS ... med ovenstående forespørgsel. I så fald får du altid de seneste resultater, når du SELECT * FROM general og du behøver ikke TRUNCATE den generelle tabel, før du kører forespørgslen (tilføjelse af nye resultater med data i tabellen vil overtræde PK-begrænsningen). Hvis du virkelig har brug for tabellen, så brug SELECT ... INTO general FROM ... i forespørgslen ovenfor.




  1. Hvordan opsummerer man alle rækker baseret på en opregningskolonne i PostgreSQL part2?

  2. Håndtering af store transaktioner med streaming replikering og MariaDB 10.4

  3. Sådan e-mailes forespørgselsresultater som en vedhæftet fil i SQL Server (T-SQL)

  4. Hvordan laver man en forespørgsel uden store og små bogstaver i Postgresql?