SQL查询根据具有分组依据的条件进行选择

时间:2018-06-08 04:23:11

标签: mysql sql group-by

我有批量实体和作业实体。批处理可以有很多作业。

现在,Job有一个名为'status'的列,其值为'REVIEW', 'NEW', 'EDIT''QA'

如果属于这些批次的任何作业的状态为'YES',并且'REVIEW'没有作业的状态为'NO',则需要选择值为'REVIEW'的所有批次并且查询将按批处理分组。

Select Batches.name, Batches.<column_I_need>, Batches.user_id
INNER JOIN Jobs ON Jobs.batch_id = Batches.id
GROUP BY Batches.id;

2 个答案:

答案 0 :(得分:2)

使用条件聚合来检查您的要求:

SELECT
    b.id,
    b.name,
    b.user_id,
    CASE WHEN SUM(CASE WHEN j.status = 'REVIEW' THEN 1 ELSE 0 END) > 0
         THEN 'YES'
         ELSE 'NO' END AS status
FROM Batches b
INNER JOIN Jobs j
    ON j.batch_id = b.id
GROUP BY
    b.id;

假设Batches.id是该表的主键列,那么如果我们GROUP BY该列,我们也可以从Batches表中选择任何列。

答案 1 :(得分:1)

我会使用case exists执行此操作:

Select b.name, b.user_id,
       (case when exists (select 1
                          from jobs j
                          where j.batch_id = b.id and j.status = 'Review'
                         )
             then 'Yes' else 'No'
        end) as status
from batches b;

这种方法比聚合方法更有效,因为它消除了group by。使用jobs(batch_id, status)上的索引,这将具有最佳性能。