PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja w PostgreSQL do wstawiania z jednej tabeli do drugiej?

Możesz rozwiązać ten problem w czystym SQL, nie potrzebujesz do tego funkcji.

Najlepszą rzeczą jest rozbicie zbierania statystyk na dwa odrębne zapytania, jedno, gdy drużyna gra u siebie, a drugie, gdy gra na wyjeździe. Dla każdego meczu oblicz punkty i strzelone gole. Następnie UNION te dwa zapytania i użyj ich jako podzapytania do obliczenia ogólnych statystyk:

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;

Nie jest to szczególnie szybkie ze względu na CASE instrukcji, ale będzie to szybsze niż użycie procedury i pętli.

Zamiast umieszczać wynik tego zapytania w tabeli, sugerowałbym CREATE VIEW general AS ... z powyższym zapytaniem. W takim przypadku zawsze otrzymujesz najnowsze wyniki, gdy SELECT * FROM general i nie musisz TRUNCATE ogólną tabelę przed uruchomieniem zapytania (dodanie nowych wyników z danymi w tabeli naruszy ograniczenie PK). Jeśli naprawdę potrzebujesz tabeli, użyj SELECT ... INTO general FROM ... w powyższym zapytaniu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C# enum do postgres enum

  2. Jak sprawdzić, gdzie używana jest funkcja?

  3. knex:jaki jest właściwy sposób tworzenia tablicy z wyników?

  4. Czy ograniczenie Postgres UNIQUE implikuje indeks?

  5. Jak filtrować wiersze według wartości zagnieżdżonych w kolumnie json?