2013-10-07 4 views
0

У меня есть таблица, которая выглядит какMySQL подсчета общего количества нулей

| id | day1 | day2 | day3 | day4 | day5 | 
| 1 | 4 | 0 | 5 | 0 | 0 | 
| 2 | 2 | 0 | 0 | 4 | 1 | 

и я хочу найти, чтобы общее число нулевых записей для каждого идентификатора, чтобы дать

| id | total_zeros | 
| 1 | 3   | 
| 2 | 2   | 
+1

Как об использовании '+'? – zerkms

ответ

4
SELECT id, (day1=0)+(day2=0)+(day3=0)+(day4=0)+(day5=0) total_zeroes 
FROM table 
+0

+1, и чтобы сделать его еще короче, можно было использовать '! Day1 +! Day2 + ...' – zerkms

+0

@zerkms Я подумал об этом. Это короче, но я думаю, что это яснее. – Barmar

+0

нигде нет :-) – zerkms

1

Почему неужели люди настаивают на создании таких негодных таблиц?

Вам нужно будет использовать оператор case, а также оценивать каждый столбец отдельно, а затем складывать результаты.

+0

Но это не нарушает нормальные формы (3-й), делает ли это ? – zerkms

+1

Ну, нет, но, конечно, не очень легко запросить, по крайней мере, на мой взгляд. Но сегодня я чувствую себя сердитым. – Andrew

+0

Каждый раз, когда вам нужно иметь повторяющиеся столбцы, подобные этому, это сильный знак того, что вы должны использовать другую таблицу. – Barmar

2

Попробуйте это:

select 
id, if(day1=0,1,0)+if(day2=0,1,0)+ if(day3=0,1,0)+if(day4=0,1,0)+if(day5=0,1,0) as total 
from test 

DEMO HERE

+0

Благодаря echo_me для очень полезного редактирования :) –

Смежные вопросы