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

Uzupełnij brakujące wiersze podczas agregacji wielu pól w Postgres

Możesz użyć:

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;

Najpierw utwórz iloczyn kartezjański dat i produktów, a następnie LEFT JOIN do rzeczywistych danych i wykonywania obliczeń.

Oracle ma świetną funkcję dla tych scenariuszy o nazwie Partycjonowane złącza zewnętrzne :

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. Tabele danych — dane wyjściowe Json — PostgreSQL — zwraca wartość null

  2. Poświadczenia stałej bazy danych Heroku

  3. Jak wybrać id z maksymalną grupą dat według kategorii w PostgreSQL?

  4. WYBIERZ ustaloną liczbę rzędów poprzez równomierne pomijanie rzędów

  5. Utwórz ciąg z tablicy