Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL GROUP BY with "default values"

I'm trying to create SELECT statement with a GROUP BY clause, which should return "default values".

Imagine the following simple MySQL table:

CREATE TABLE `tracker` (
  `id` INTEGER PRIMARY KEY auto_increment,
  `date` DATETIME NOT NULL,
  `customer_id` INTEGER NOT NULL
);

The table contains only one record:

INSERT INTO `tracker` (`date`, `customer_id`) VALUES('2010-05-03', 1);

After wards I'm executing the following SQL query:

SELECT DATE(`date`), COUNT(customer_id) FROM tracker
WHERE DATE(`date`) >= '2010-05-01' AND DATE(`date`) <= '2010-05-05'
GROUP BY DATE(`date`) ORDER BY DATE(`date`);

And get the expected result set:

+----+---------------------+-------------+
| id | date                | customer_id |
+----+---------------------+-------------+
|  1 | 2010-05-10 00:00:00 |           1 |
+----+---------------------+-------------+

However, I would like the result set to look like this:

+--------------+--------------------+
| DATE(`date`) | COUNT(customer_id) |
+--------------+--------------------+
| 2010-05-01   |                  0 |
| 2010-05-02   |                  0 |
| 2010-05-03   |                  1 |
| 2010-05-04   |                  0 |
| 2010-05-05   |                  0 |
+--------------+--------------------+

Is it possible to achieve this behavior?

like image 611
Christoph Schiessl Avatar asked May 10 '10 10:05

Christoph Schiessl


People also ask

Does GROUP BY work with NULL?

GROUP BY does treat all NULL values equally.

Does GROUP BY automatically order?

group by does not order the data neccessarily. A DB is designed to grab the data as fast as possible and only sort if necessary. So add the order by if you need a guaranteed order.


1 Answers

You could build a temporary table of the valid dates in the range and then incorporate that into your query - that's about the only way forward that I can immediately see...

Martin

like image 200
Martin Milan Avatar answered Sep 28 '22 21:09

Martin Milan