How to combine aggregate results?

Asked by At

I have two queries:

Q#1:

SELECT
  DISTINCT Col1,
  COUNT(Col1) AS COUNT
FROM
  `dataset.W01_*`
GROUP BY
  Col1
ORDER BY
  COUNT DESC 

Q#2:

SELECT
  DISTINCT Col1,
  COUNT(Col1) AS COUNT
FROM
  `dataset.W02_*`
GROUP BY
  Col1
ORDER BY
  COUNT DESC

With Results:

Result1     
Row Col1    COUNT
1   12345   33844
2   56789   32161
3   11223   31298

and

Result2     
Row Col1    COUNT
1   12345   33944
2   11223   41298
3   67890   12161

I want to combine the queries to get the following result:

Row Col1    COUNT
1   11223   41298
2   12345   33944
3   56789   32161
4   67890   12161

Basically in Result2:

1) 12345's count is bigger : 33944 than in Result1 and I want it with the new count in the new table.

2) Col1=67890 is new and I want it with its COUNT in the new table.

So the two results to be merged with updated new rows, new counts and sorted by COUNT in decreasing order.

1 Answers

3
Mikhail Berlyant On Best Solutions

Below is for BigQuery Standard SQL

#standardSQL
WITH result1 AS (
  SELECT Col1, COUNT(Col1) AS count
  FROM `dataset.W01_*`
  GROUP BY Col1
), result2 AS (
  SELECT Col1, COUNT(Col1) AS count
  FROM `dataset.W02_*`
  GROUP BY Col1
)
SELECT col1, GREATEST(IFNULL(t1.count, t2.count), IFNULL(t2.count, t1.count)) count
FROM result1 t1 
FULL OUTER JOIN result2 t2
USING (col1)
ORDER BY count DESC   

Also, note: you do not need DISTINCT in your Q1 and Q2 queries