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

Попълнете липсващите редове при агрегиране върху множество полета в Postgres

Можете да използвате:

WITH cte AS (
   SELECT date, s.product
   FROM  ... -- some way to generate date series
   CROSS JOIN (SELECT DISTINCT product FROM sales_data) s
)
SELECT 
    c.date,
    c.product,
    COUNT(sd.sale_id) AS sales
FROM cte c
LEFT JOIN sales_data sd
  ON c.date = sd.date AND c.product= sd.product
GROUP BY c.date, c.product
ORDER BY c.date, c.product;

Първо създайте декартово произведение от дати и продукти, след това LEFT JOIN към действителни данни и извършване на изчисления.

Oracle има страхотна функция за тези сценарии, наречена Разделени външни съединения :

SELECT times.time_id, product, quantity 
FROM inventory  PARTITION BY  (product) 
RIGHT OUTER JOIN times ON (times.time_id = inventory.time_id) 
WHERE times.time_id BETWEEN TO_DATE('01/04/01', 'DD/MM/YY') 
      AND TO_DATE('06/04/01', 'DD/MM/YY') 
ORDER BY  2,1; 


  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. Редовен израз в клауза LIKE на PostgreSQL

  3. Как трябва да използвам Postgresql docker изображение/контейнер?

  4. грешка при настройка на java String[] към подготвен израз за postgres

  5. NodeJS и Express:Грешка:самоподписан сертификат