I am trying to bin my data to see how it is distributed. Some bins contain no data. So, when I query my bins, I only get the bins containing data. I would like the query to also show empty bins.
I was trying to create a table containing all the bins to latter do a LEFT JOIN with the query containing data from my table. But I still only get bins with data. The query does not show empty bins. This is the code I was using:
WITH tb AS
(
SELECT 'A [+0 min-1 min]' AS bins UNION ALL
SELECT 'B [+1 min-113 min]' UNION ALL
SELECT 'C [+113 min-223 min]' UNION ALL
SELECT 'D [+223 min-335 min]' UNION ALL
SELECT 'E [+335 min-447 min]' UNION ALL
SELECT 'F [+447 min-559 min]' UNION ALL
SELECT 'G [+559 min-671 min]' UNION ALL
SELECT 'H [+671 min-783 min]' UNION ALL
SELECT 'I [+783 min-895 min]' UNION ALL
SELECT 'J [+895 min-1007 min]' UNION ALL
SELECT 'K [+1007 min-1119 min]' UNION ALL
SELECT 'L [+1119 min-1231 min]' UNION ALL
SELECT 'M [+1231 min-1343 min]' UNION ALL
SELECT 'N [+1343 min-1440 min]' UNION ALL
SELECT 'O [+1140 min]'
), aa AS
(
SELECT CASE
WHEN ride_length BETWEEN '00:00:00' AND '00:01:00' THEN
'A [+0 min-1 min]'
WHEN ride_length BETWEEN '00:01:01' AND '01:53:00' THEN
'B [+1 min-113 min]'
WHEN ride_length BETWEEN '01:53:01' AND '03:43:00' THEN
'C [+113 min-223 min]'
WHEN ride_length BETWEEN '03:43:01' AND '05:35:00' THEN
'D [+223 min-335 min]'
WHEN ride_length BETWEEN '05:35:01' AND '07:27:00' THEN
'E [+335 min-447 min]'
WHEN ride_length BETWEEN '07:27:01' AND '09:19:00' THEN
'F [+447 min-559 min]'
WHEN ride_length BETWEEN '09:19:01' AND '11:11:00' THEN
'G [+559 min-671 min]'
WHEN ride_length BETWEEN '11:11:01' AND '13:03:00' THEN
'H [+671 min-783 min]'
WHEN ride_length BETWEEN '13:03:01' AND '14:55:00' THEN
'I [+783 min-895 min]'
WHEN ride_length BETWEEN '14:55:01' AND '16:47:00' THEN
'J [+895 min-1007 min]'
WHEN ride_length BETWEEN '16:47:01' AND '18:39:00' THEN
'K [+1007 min-1119 min]'
WHEN ride_length BETWEEN '18:39:01' AND '20:31:00' THEN
'L [+1119 min-1231 min]'
WHEN ride_length BETWEEN '20:31:01' AND '22:23:00' THEN
'M [+1231 min-1343 min]'
WHEN ride_length BETWEEN '22:33:01' AND '24:00:00' THEN
'N [+1343 min-1440 min]'
ELSE
'O [+1140 min]'
END AS bins,
member_casual,
rideable_type
FROM (SELECT TIMEDIFF(ended_at, started_at) AS ride_length,
member_casual,
rideable_type
FROM cyclistic) a
)
SELECT tb.bins,
aa.member_casual,
aa.rideable_type,
IFNULL(COUNT(member_casual), 0)
FROM tb
LEFT JOIN aa
ON tb.bins = aa.bins
GROUP BY tb.bins, aa.member_casual, aa.rideable_type;
For some reason, the output I get is the following:
+------------------------+---------------+---------------+--------------------------------+
| bins | member_casual | rideable_type | IFNULL(COUNT(member_casual),0) |
+------------------------+---------------+---------------+--------------------------------+
| classic_bike | 25999 |
| electric_bike | 47882 |
| classic_bike | 12892 |
| electric_bike | 33882 |
| electric_bike | 1213471 |
| electric_bike | 1584591 |
| classic_bike | 1679971 |
| classic_bike | 857810 |
| docked_bike | 158858 |
| classic_bike | 15025 |
| electric_bike | 2426 |
| docked_bike | 11824 |
| classic_bike | 1661 |
| electric_bike | 635 |
| classic_bike | 400 |
| electric_bike | 184 |
| classic_bike | 84 |
| classic_bike | 38 |
| docked_bike | 195 |
| docked_bike | 1554 |
| classic_bike | 1213 |
| electric_bike | 323 |
| docked_bike | 139 |
| classic_bike | 25 |
| classic_bike | 42 |
| docked_bike | 263 |
| classic_bike | 111 |
| classic_bike | 213 |
| docked_bike | 192 |
| classic_bike | 159 |
| classic_bike | 113 |
| electric_bike | 5263 |
| classic_bike | 176 |
| classic_bike | 400 |
| electric_bike | 64 |
| docked_bike | 443 |
| docked_bike | 169 |
| classic_bike | 131 |
| classic_bike | 194 |
| classic_bike | 275 |
| docked_bike | 207 |
| classic_bike | 129 |
| electric_bike | 1 |
| docked_bike | 152 |
| classic_bike | 80 |
| classic_bike | 126 |
| classic_bike | 2606 |
| docked_bike | 1507 |
| classic_bike | 716 |
| docked_bike | 201 |
| classic_bike | 94 |
| classic_bike | 47 |
| docked_bike | 1528 |
| electric_bike | 168 |
| docked_bike | 229 |
| classic_bike | 137 |
| classic_bike | 287 |
| electric_bike | 51 |
+------------------------+---------------+---------------+--------------------------------+
I also tried COALESCE, but I got the same output.