MySQL. Выборка из базы. COUNT по двум полям.

Krisha

pain in the neck
Falc
Не совсем понимаю какой вид должен приобрести запрос ?
 

Krisha

pain in the neck
Falc
Я ж грю, запрос с sum возвращает неверный результат, вот запрос:

SELECT sum(Passed = 1) AS Passed, sum(Failed !=0) AS Failed
FROM Statistics WHERE DriverID = '5808'

Получаю:
Passed = 5
Failed = 8 (а должно быть 4)
 

Falc

Новичок
Krisha
Страно, у меня работает

Можешь распечатать кусок таблицы с DriverID = '5808'
 

Krisha

pain in the neck
Код:
DriverID LessonID Failed      Passed 
5808      50           2           0  
5808      68           1           1  
5808      69           1           1  
5808      70           2           0  
5808      78           1           1  
5808      82           0           1  
5808      83           1           1  
5808      84           1           0  
5808      85           1           0  
5808      86           1           0  
5808      75           0           1  
5808      76           0           1
 

Krisha

pain in the neck
Falc
Если брать этот листинг, то должно быть: Failed - 9, Passed - 7
 

Falc

Новичок
Krisha
А
SELECT sum(Passed = 1) AS Passed, sum(Failed !=0) AS Failed
FROM Statistics WHERE DriverID = '5808'

Сколько выдает?
 

Falc

Новичок
Krisha
Страно, что тогда у тебя не правильно выбирал, а сейчас нормально :)
 

Krisha

pain in the neck
я уже и сам запутался :)

единственный момент остался, нужно чтобы считало Failed только те, у которых Failed !=0 и Passed != 1
 

Falc

Новичок
Заодно сравни скрость с:
WHERE DriverID = '".$id."' AND ( Failed != '0' OR Passed = '1' )

и
WHERE DriverID = '".$id."'

Просто интересно. будет разница или нет.

-~{}~ 27.02.04 19:40:

Krisha
>>я уже и сам запутался

Выполни:
SELECT 1234 != 0
и
SELECT 0 != 0

И теперь подумай чему должна быть равна сумма:
sum(Failed !=0)
 

Verk

Guest
Автор оригинала: Krisha
Falc
хм, сейчас правильно выбирает... странно
Krisha, побереги мозги тех кто будет этот код читать после тебя, сделай в 2 простых запроса.
И потомки вспомнят тебя хорошим словом :)
 

Falc

Новичок
Verk
В один запрос короче и быстрее.

А те кто делает в 2 запроса этот тред читать не будут :)
 

Verk

Guest
Автор оригинала: Falc
Verk
В один запрос короче и быстрее.
А те кто делает в 2 запроса этот тред читать не будут :)
да это я про читабильность кода, который пишет Krisha
 

Falc

Новичок
Verk
>>да это я про читабильность кода, который пишет Krisha
А комментарии что только для крутых программеров, обычные программеры их не читают?
 

Krisha

pain in the neck
Falc
Разницы в скорости нету как я вижу (это я про AND ( Failed != '0' OR Passed = '1' ) )

Verk
Ты вообще говорил, что низя один запросом :)
 

Verk

Guest
Автор оригинала: Falc
VerkА комментарии что только для крутых программеров, обычные программеры их не читают?
Сложно сказать, эмпирическими данными по этому вопросу я не располагаю.
Наверное, читают, если конечно они (комменты) есть.
 

Krisha

pain in the neck
В общем алилуя, вот конечный результат:
PHP:
SELECT 
COUNT(*) AS Total, 
SUM(Passed = 1) AS Passed, 
SUM(Failed !=0 AND Passed != 1) AS Failed 
FROM Statistics 
WHERE DriverID = '$id'
 
Сверху