SQL 两个表使用连接的不同计数



我有两个表。

表 1 包含订单和客户代码。表 2 包含带有问题代码的订单。

我需要能够从表 1 中按客户返回不同的订单计数,以及表 2 中问题代码为"F"的订单的不同客户计数。 然后最后一个字段将是两者的比率。 问题计数/订单计数。 我使用的是 AS400/DB2 SQL。 任何帮助将不胜感激。

Customer ORcnt IScnt IssueRatio cust1 450 37 0.082 cust2 255 12 0.047 cust3 1024 236 0.230 cust4 450 37 0.082

您可以使用问题表的outer join,并使用distinct count。 如下所示,具体取决于您的表定义:

select o.customercode, 
       count(distinct o.orderid), 
       count(distinct i.orderid), 
       count(distinct i.orderid)/count(distinct o.orderid) ratio
from table1 o
      left join table2 i on o.orderid = i.orderid and i.issuecode = 'F'
group by o.customercode

一些数据库需要将比率转换为小数 - 我不确定db2. 如果需要,一种方法是将结果乘以 1.0:

1.0*count(distinct i.orderid)/count(distinct o.orderid)

此外,您可能不需要带有countdistinct - 取决于您的数据...

如果我

理解正确,这是一个join查询以及条件聚合:

select t1.customer, count(*) as ordercnt,
       sum(case when issuecode = 'F' then 1 else 0 end) as issuecnt,
       avg(case when issuecode = 'F' then 1.0 else 0 end) as issuep
from table1 t1 join
     table2 t2
     on t1.orderid = t2.orderid
group by t1.customer;

我正在使用一些子查询来执行此操作,以使其在描述您提出的问题方面更具可读性。 SGEDDES的解决方案可能也可以工作(并且可能表现得更好),具体取决于数据的精确结构。

SELECT t.customer,
       count(t.orderID_All),
       count(t.orderID_F),
       count(t.orderID_F)/count(t.orderID_All)
FROM
  (SELECT orders.customer,
          orders.orderID AS orderID_All,
          issues.orderID AS orderID_F /*assuming primary/unique key is customer-orderID*/
   FROM table1 orders
   LEFT OUTER JOIN /*you want *all* orders on the left and just orders w/ 'F' on the right*/
     (SELECT DISTINCT orderID
      FROM table2
      WHERE issuecode = 'F') issues ON orders.orderID = issues.orderID) t
GROUP BY t.customer;

相关内容

  • 没有找到相关文章

最新更新