Продолжая тему SQL-запросов, хочу показать еще один запрос. Задача стоит в том, чтобы подсчитать количество пришедших клиентов по всем заявкам. В нашем случае флаг клиента — это значение idbid > 0. Вот, собственно, такой запрос получился: SELECT
count( * ) ,
count( idbid
) ,
count( idbid
>0 ) ,
count( if( idbid >0, 1, NULL ) ) ,
sum( idbid
) ,
sum( idbid
>0 ) ,
idbid
>0 ,
operatorbid
FROM ххххххх
GROUP BY operatorbid
? Здесь из всех вариантов подсчета правильные только два:
idbid
>0 возвращает 0 или 1, что не подходит нам, так как 0 !== null и возвращает общее количество колонок.idbid
>0 ). Этот вариант так же возвращает корректное значение, так как подсчитывает сумму только вариантов 0 или 1, что в сумме дает правильное количество клиентов. А вот просто sum( idbid
) нам не годится, так как возвращает абсолютное значение суммы всех ID-шников найденных клиентов, а они все больше единицы (в итоге мы получаем огромное число).