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

SQL Server - условно агрегиране с корелация

Има по-лесно решение:

SELECT c.Customer, c."User", c."Revenue",
       1.0 * Revenue/ NULLIF(c2.sum_total, 0) AS percentage,
       1.0 * c2.sum_running / NULLIF(c2.sum_total, 0) AS running_percentage
FROM t c CROSS APPLY
     (SELECT SUM(c2.Revenue) AS sum_total,
             SUM(CASE WHEN c2.Revenue >= x.Revenue THEN c2.Revenue ELSE 0 END) 
                 as sum_running
      FROM t c2 CROSS JOIN
           (SELECT c.REVENUE) x
      WHERE c."User" = c2."User"
     ) c2
ORDER BY "User", Revenue DESC;

Не съм сигурен защо или дали това ограничение е в стандарта SQL '92. Наистина го запомних доста добре преди около 20 години, но не си спомням това конкретно ограничение.

Трябва да отбележа:

  • По времето на стандарта SQL 92 страничните съединявания всъщност не бяха на радара. Sybase определено нямаше такава концепция.
  • Други бази данни правят имат проблеми с външни препратки. По-специално, те често ограничават обхвата до едно ниво.
  • Самият SQL стандарт е по-скоро политически (т.е. управляван от доставчика), отколкото управляван от действителните потребителски изисквания на базата данни. Е, с времето се движи в правилната посока.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е сканиране на растерна памет в план за заявка?

  2. ГРУПИРАНЕ ПО последователни дати, разделени с пропуски

  3. Добавяне на нова колона във временна таблица

  4. Как да монтирате postgresql том с помощта на Aws EBS в Kubernete

  5. Някакви недостатъци при използването на текст от тип данни за съхранение на низове?