How about this:
SELECT `date`, SUM(data) AS sum
FROM (
SELECT `date`, data FROM table1
UNION ALL
SELECT `date`, data FROM table2
) AS u
GROUP BY `date`
If your table1
etc tables are very large you will probably get faster results by doing two things:
- creating a compound index
(date, data)
on each table. - refactoring the query so each table is summarized before the
UNION ALL
.
The more efficient query might look like this.
SELECT `date`, SUM(data) AS sum
FROM (
SELECT `date`, SUM(data) AS data FROM table1 GROUP BY `date`
UNION ALL
SELECT `date`, SUM(data) AS data FROM table2 GROUP BY `date`
UNION ALL
SELECT `date`, SUM(data) AS data FROM table3 GROUP BY `date`
UNION ALL
SELECT `date`, SUM(data) AS data FROM table4 GROUP BY `date`
) AS sums
GROUP BY `date`
MySQL doesn't offer materialized views. That's Oracle.