sql >> Database >  >> RDS >> PostgreSQL

Vul ontbrekende rijen in bij aggregatie over meerdere velden in Postgres

Je zou kunnen gebruiken:

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;

Maak eerst een Cartesiaans product van datums en producten, dan LEFT JOIN naar actuele gegevens en berekeningen maken.

Oracle heeft een geweldige functie voor deze scenario's genaamd Gepartitioneerde buitenste joins :

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. Hoe deze vreemde karakters te converteren? (ë, Ã, ì, ù, Ã)

  2. ON DELETE CASCADE werkt niet in MySQL

  3. ASCII()-functie in Oracle

  4. Hoe genereer ik een willekeurig getal voor elke rij in een T-SQL-selectie?