2012-05-02 8 views
2

テーブルデバイス:数の複数の行の値は、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)device2'は0または1のどちらかなので、あなたのCASE WHEN返し、それは丈夫それは:) "ブール" であることを確認していないAS必要ない。 –

+0

エラーが発生しています:{"errorInfo":["42000"、1064、 "SQL構文にエラーがあります;右側の構文はMySQLサーバーのバージョンに対応するマニュアルを参照してください。 \ n \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ tLEFT JOINモデルはmodels.model_id = devices.type_id \ r 'の4行目にあります]]}私はPDOを使用しています。5.1.62はmysqlのバージョンです – InTry

+0

3行目の最後の '、'を削除してください。 –