PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Функция в PostgreSQL за вмъкване от една таблица в друга?

Можете да разрешите този проблем в чист SQL, не ви трябва функция за това.

Най-доброто нещо е да разделите събирането на статистически данни на две отделни заявки, една за това кога отборът играе у дома и една когато играе като гост. За всяка игра изчислявайте точките и отбелязаните голове. След това UNION тези две заявки и ги използвайте като подзаявка за изчисляване на общата статистика:

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;

Това не е особено бързо поради CASE изрази, но ще бъде по-бързо от използването на процедура и цикъл.

Вместо да поставяте резултата от тази заявка в таблица, предлагам ви CREATE VIEW general AS ... с горното запитване. В този случай винаги получавате най-новите резултати, когато SELECT * FROM general и не е нужно да TRUNCATE общата таблица, преди да стартирате заявката (добавянето на нови резултати с данни в таблицата ще наруши PK ограничението). Ако наистина имате нужда от таблицата, използвайте SELECT ... INTO general FROM ... в заявката по-горе.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MigrationSchemaMissing(Не може да се създаде таблицата django_migrations (%s) % exc)

  2. PostgreSQL заявка с генерирани колони

  3. Най-добрият начин да проверите за празна или нулева стойност

  4. ГРУПИРАНЕ ПО и БРОЙ с помощта на ActiveRecord

  5. Как да оптимизираме логическата репликация на PostgreSQL