Fi1osof 17 ноября 2015 1 0
Продолжая тему 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`




Здесь из всех вариантов подсчета правильные только два:
1. count( if( idbid >0, 1, NULL ) ). Здесь, если idbid не больше нуля, то возвращается null (на каждой итерации строки). Важно, чтобы именно null, так как ноль тоже учитывается в подсчете, если выполняется count(), а не sum(). Именно поэтому подсчеты 1, 2 и 3 возвращают одно и то же. Как видите, вариант `idbid` >0 возвращает 0 или 1, что не подходит нам, так как 0 !== null и возвращает общее количество колонок.
2. sum( `idbid` >0 ). Этот вариант так же возвращает корректное значение, так как подсчитывает сумму только вариантов 0 или 1, что в сумме дает правильное количество клиентов. А вот просто sum( `idbid`) нам не годится, так как возвращает абсолютное значение суммы всех ID-шников найденных клиентов, а они все больше единицы (в итоге мы получаем огромное число).
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.