Search code examples
postgresqljoingroup-bycrosstab

PostgreSQL merge two queries with COUNT and GROUP BY in each


1st query:

SELECT date_trunc('day', date1) as date, COUNT(*) AS count_a 
FROM table_a GROUP BY date

result:

date                    count_a
2014-04-01 00:00:00.0   1011642
2014-04-02 00:00:00.0   309048

2nd query:

SELECT date_trunc('day', date1) as date, COUNT(*) AS count_b 
FROM table_b GROUP BY date

result:

date                    count_b
2014-04-01 00:00:00.0   2342
2014-04-02 00:00:00.0   43432

I'd like to get:

date                    count_a  count_b
2014-04-01 00:00:00.0   1011642  2342
2014-04-02 00:00:00.0   309048   43432

Is this possible?


Solution

  • A simple UNION ALL should make it possible.

    SELECT date1 date, SUM(a) count_a, SUM(b) count_b 
    FROM (
      SELECT DATE_TRUNC('day', date1) date1, 1 a, 0 b FROM table_a 
      UNION ALL 
      SELECT DATE_TRUNC('day', date1) date1, 0 a, 1 b FROM table_b
    ) z 
    GROUP BY date;
    

    EDIT: Here's an SQLfiddle.