2013-05-27 54 views
0

我有数据设置如下,进行逻辑检查分组查询结果

job_id | status 
-------|------- 
    100 | 0 
    100 | 0 
    102 | 1 
    102 | 0 
    104 | 1 
    104 | 1 
--------------- 

查询处理数据

SELECT job_id, (CASE WHEN FIND_IN_SET(0, GROUP_CONCAT(status)) > 0 THEN FALSE ELSE TRUE END) AS isfinished 
FROM mytable 
GROUP BY job_id 

,其结果是

job_id | isfinished 
-------|----------- 
    100 |  0 
    102 |  0 
    104 |  1 
------------------- 

有任何人都做过这个?也许有更好的方法。

+0

你到底想干什么? – hims056

回答

0

它看起来像你想看看如果最小值是大于0

SELECT job_id, min(status) > 0 AS isfinished 
FROM mytable 
GROUP BY job_id; 

http://sqlfiddle.com/#!2/e4792/4

+0

@ hims056,...感谢您的快速响应,状态代表每个job_id的“工作状态”,“1”代表“已完成”。只有完成所有工作订单状态,job_id才能关闭。 – oedin

+0

对,我的查询会给出与您的结果相同的结果,并且可能会更清晰一些。如果每个job_id的行数很多,find_in_set可能会比min小。 –

+0

确实...比我的更简单,更易于理解。 – oedin