首页 > 解决方案 > SQL 使用 0 行 from where 0 rows to group by 而不是什么都没有

问题描述

这是我的桌子

在此处输入图像描述

我正在使用下一个查询

    SELECT XFailTbl.id, 
       xfail, 
       yfail 
FROM   (SELECT Count(*) AS XFail, 
               [id] 
        FROM   [table] 
        WHERE  ( x < xmin 
                  OR x > xmax ) 
        GROUP  BY [id]) AS XFailTbl 
       JOIN (SELECT Count(*) AS YFail, 
                    [id] 
             FROM   [table] 
             WHERE  ( y < ymin 
                       OR y > ymax ) 
             GROUP  BY [id]) AS YFailTbl 
         ON XFailTbl.id = YFailTbl.id 

我得到了下一个结果

在此处输入图像描述

我的预期结果是

在此处输入图像描述

我知道我不能使用条件, (Y<Ymin OR Y>YMax)因为我得到 0 行到 group by 并且它不能计算 0 行,因为它不知道它存在但是获得预期结果的方法是什么?我不知道...

谢谢

标签: sqlgroup-bycount

解决方案


您只需要条件聚合:

select id,
       sum(case when X < Xmin or X > XMax then 1 else 0 end) as xfail,
       sum(case when Y < Ymin or Y > YMax then 1 else 0 end) as yfail
from
group by id;

推荐阅读