MySQL Group by CASE

时间:2017-04-24 10:21:16

标签: mysql

我有一个响应表,其中包含一个像这样的数据集......

id|resp_id|value|is_cleaned
1  1       Yes   0
2  1       No    1
3  2       No    0

我想获得所有响应,其中is_cleaned = 1,如果它不存在我想得到未清除的结果。到目前为止我尝试过的是,通过resp_id进行分组并使用CASE语句。不知道究竟要在CASE声明中加入什么。

到目前为止我所拥有的是

SELECT * FROM cleanedresponse GROUP BY case when is_cleaned = 1 then resp_id else resp_id end

我想要以下结果

resp_id|value|is_cleaned
1       No    1
2       No    0

1 个答案:

答案 0 :(得分:2)

您可以先为每个max(is_cleaned)获取resp_id

select  resp_id, max(is_cleaned)
from    cleanedresponse 
group by resp_id

然后将其用作原始表格中的过滤器

select  t1.resp_id, t1.value, t1.is_cleaned
from    cleanedresponse t1
join    (
            select  resp_id, max(is_cleaned) as max_cleaned
            from    cleanedresponse 
            group by resp_id
        ) t2
on      t1.resp_id = t2.resp_id and
        t1.is_cleaned = t2.max_cleaned