我有以下SQL查询,其输出如下所示:
select stds.classID as classID, stds.clsLimit as clsLimit
, max(stds.id)as maxStdsID
from class cls
left outer join students stds
on cls.id = stds.classID
group by stds.classID,stds.clsLimit
对于每个classID,我要选择clsLimit为1的maxStdsID的最大值。 如果没有将clsLimit设置为1的maxStdsID,那么我想选择将clsLimit设置为0的maxStdsID的最大值
我尝试了以下逻辑
select stds.classID as classID
, max(CASE WHEN stds.clsLimit = 1 then stds.id else stds.id end) as maxStdsID
from class cls
left outer join students stds
on cls.id = stds.classID
group by stds.classID
我没有得到想要的输出。
答案 0 :(得分:2)
您很近。 。 。但使用coalesce()
:
select cls.classID,
coalesce(max(case when stds.clsLimit = 1 then stds.id end),
max(case when stds.clslimit = 0 then stds.id end)
) as maxStdsID
from class cls left outer join
students stds
on cls.id = stds.classID
group by cls.classID;
如果没有“ 1”的值,那么它将获得“ 0”的最大值。
请注意,我更改了聚合列,以使用left join
中第一个表中的列,而不是第二个表中的列。
答案 1 :(得分:0)
您可以尝试:
select stds.classID as classID , stds.clsLimit as clsLimit ,
max(stds.id)as maxStdsID
from class cls
left outer join students stds
on cls.id = stds.classID
where stds.clsLimt = CASE WHEN stds.clsLimit = 1 then 1 ELSE 0 END
group by stds.classID,stds.clsLimit