Если вы установите пустые поля равными NULL вместо пробелов, вы можете полагаться на тот факт, что count()
не будет включать пустые поля. Все решения с функцией каждой строки (if
, case
, coalesce
и т. Д.) Подходят для небольших баз данных, но плохо масштабируются для больших баз данных. Имейте в виду, что small - это термин относительно , он может быть приемлем для ваших баз данных, даже если вы думаете, что они большие - я работаю в магазине, где миллионы строк имеют размеры наших таблиц конфигурации: -)
Тогда вы можете просто использовать:
select
count(field1) as count1,
count(field2) as count2,
count(field3) as count3,
count(field4) as count4
from ...
(или count(distinct fieldX)
для разных значений, конечно).
Если это правдоподобный путь, вы можете просто настроить свой стол с помощью:
update tbl set field1 = NULL where field1 = '';
update tbl set field2 = NULL where field2 = '';
update tbl set field3 = NULL where field3 = '';
update tbl set field4 = NULL where field4 = '';
Но, как и во всех вопросах производительности базы данных, измеряют, не угадывают. И измеряют в целевой среде (или подходящей копии). И измерять часто. Настройка базы данных не является операцией установки и забывания.