2012-05-02 4 views
2

стола Devices:подсчет несколько значений строк в одном запросе, MySQL

id device type_id device_status 
1  dev1  2  1   
2  dev2  2  2   
3  dev3  7  2   
4  dev5  9  3   

модель таблица:

model_id vendor_id model_name 
    1  3   name1   
    2  5   name2  
    3  7   name3   
    4  7   name4 

и запрос выглядит следующим образом:

SELECT model_id, type_id, model_name, 
COUNT(type_id) AS numOfDevices 
FROM devices 
LEFT JOIN models ON models.model_id = devices.type_id 
WHERE device_status = 2 OR device_status = 3 
GROUP BY type_id 

, что я получаю от этот запрос:

There are $numOfDevices $model_name items. 

и все в порядке, но есть ли способ подсчета устройств только с device_status = 3 в том же запросе?

ответ

3

Может быть что-то вроде этого:

SELECT model_id, type_id, model_name, 
SUM(CASE WHEN device_status=2 THEN 1 ELSE 0 END) AS device2, 
SUM(CASE WHEN device_status=3 THEN 1 ELSE 0 END) AS device3, 
SUM(CASE WHEN device_status IN (2,3) THEN 1 ELSE 0 END) AS device2device3 
FROM devices 
LEFT JOIN models ON models.model_id = devices.type_id 
WHERE device_status = 2 OR device_status = 3 
GROUP BY type_id 
+0

'SUM (DEVICE_STATUS = 2) AS device2' не делают его выносливее то :) "логическое" возвращает 0 или 1, так что ваш случай, когда не требуется. –

+0

Я получаю сообщение об ошибке: {"errorInfo": ["42000", 1064, "У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с устройствами FROM \ n \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ tLEFT Модели JOIN ON models.model_id = devices.type_id \ r 'в строке 4 "]}. BTW Я использую PDO и 5.1.62 - это версия mysql – InTry

+0

Удалить последнюю ',' в третьей строке. –

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