如何按位掩码分组?

时间:2013-12-17 20:38:56

标签: mysql bitmap group-by

尝试使用query2替换query1,但似乎无效。有没有办法让query1变得简单?当WHERE子句很长时,query1将有许多冗余语句。

查询1:

    SELECT "RUNNING", COUNT(*) FROM devices WHERE status_id & 1 UNION
    SELECT "MISSING", COUNT(*) FROM devices WHERE status_id & 2 UNION
    SELECT "ERROR", COUNT(*) FROM devices WHERE status_id & 4 UNION
    SELECT "WARNING", COUNT(*) FROM devices WHERE status_id & 8 UNION
    SELECT "FAILED", COUNT(*) FROM devices WHERE status_id & 16 UNION
    SELECT "RESTARTING", COUNT(*) FROM devices WHERE status_id & 32 UNION
    SELECT "OFF", COUNT(*) FROM devices WHERE status_id & 64 UNION
    SELECT "LOW", COUNT(*) FROM devices WHERE status_id & 128 UNION
    SELECT "RETIRED", COUNT(*) FROM devices WHERE status_id & 256 UNION
    SELECT "UNKNOWN", COUNT(*) FROM devices WHERE status_id & 512;

QUERY2:

    SELECT (CASE 
     WHEN (status_id & 1) THEN "RUNNING" 
     WHEN (status_id & 2) THEN "MISSING" 
     WHEN (status_id & 4) THEN "ERROR" 
     WHEN (status_id & 8) THEN "WARNING" 
     WHEN (status_id & 16) THEN "FAILED" 
     WHEN (status_id & 32) THEN "RESTARTING" 
     WHEN (status_id & 64) THEN "OFF" 
     WHEN (status_id & 128) THEN "LOW" 
     WHEN (status_id & 256) THEN "RETIRED" 
     WHEN (status_id & 512) THEN "UNKNOWN" END
    ) AS DS, COUNT(*)
    FROM devices
    GROUP BY DS;

0 个答案:

没有答案