Я думаю, что вы слишком усложнили логику. Чтобы получить ожидаемые результаты, вы можете UNION ALL
выполнить три простых запроса следующим образом:
SELECT 'ada' attribute, 96 bin, COUNT(*) FROM input_table WHERE bin = 96
UNION ALL SELECT 'ada' attribute, 97 bin, COUNT(*) FROM input_table WHERE bin = 97
UNION ALL SELECT 'ada' attribute, 98 bin, COUNT(*) FROM input_table WHERE bin = 98
Эти типы запросов с неявным GROUP BY
всегда будут возвращать что-то, даже если нет записи, котораясоответствует условию WHERE
.
Демонстрация на DB Fiddle :
attribute | bin | (No column name)
:-------- | --: | ---------------:
ada | 96 | 3
ada | 97 | 0
ada | 98 | 5