首页 > 解决方案 > SQL - 划分聚合字段,对 SQL 来说非常新

问题描述

我有发票中的行项目列表,其中包含一个字段,该字段指示行是否已交付或提取。我需要从总行数中找到交付项目的百分比。

销售_NBR | 总计 | 交货率

1 = 已交付 0 = 从 FULFILLMENT 取货。

SELECT SALES_NBR, 
COUNT (ITEMS) as Total, 
SUM (case when FULFILLMENT = '1' then 1 else 0 end) as delivered,
(SELECT delivered/total) as Deliveryrate
FROM Invoice_table
WHERE STORE IN '0123'
And SALE_DATE >='2020-02-01'
And SALE_DATE <='2020-02-07'
Group By SALES_NBR, Deliveryrate;

我的查询执行但由于某种原因从未完成。有没有更简单的方法来做到这一点?履行字段不包含任何 NULL 值。

任何帮助,将不胜感激。

标签: sqlfielddivision

解决方案


如果你想得到一个“不错”的查询,你可以使用这样的子查询:

select
  qry.*,
  qry.delivered/qry.total as Deliveryrate
from (
  select 
    SALES_NBR, 
    count(ITEMS) as Total, 
    sum(case when FULFILLMENT = '1' then 1 else 0 end) as delivered
  from Invoice_table
  where STORE IN '0123'
    and SALE_DATE >='2020-02-01'
    and SALE_DATE <='2020-02-07'
  group by SALES_NBR
  ) qry;

但我认为这个,即使更丑,也可以执行得更快:

  select 
    SALES_NBR, 
    count(ITEMS) as Total, 
    sum(case when FULFILLMENT = '1' then 1 else 0 end) as delivered,
    sum(case when FULFILLMENT = '1' then 1 else 0 end)/count(ITEMS) as Deliveryrate
  from Invoice_table
  where STORE IN '0123'
    and SALE_DATE >='2020-02-01'
    and SALE_DATE <='2020-02-07'
  group by SALES_NBR

推荐阅读