sql - 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 值。
任何帮助,将不胜感激。
解决方案
如果你想得到一个“不错”的查询,你可以使用这样的子查询:
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
推荐阅读
- android - RecyclerView - 如何仅在拖放时获得位置?
- odoo - 在常见的Odoo方法'execute_kw'中,后缀'kw'指的是什么?
- c - 当我在堆栈上分配大量内存时,C 程序崩溃
- excel-formula - 多个 COUNTIFS,带有可变文本和数字以及命名范围
- java - 如何找出调试符号的含义
- typo3 - TYPO3 9.5.4(带 slug)忽略获取参数“类型”
- image-processing - 如何加快 YUV 转换以实现快速 SkiaSharp 相机预览?
- python - 在熊猫的另一列中找到每个数字条纹的最大值
- python - 编写多行在 Python 中不起作用
- xamarin - 应用程序 Xamarin Forms 中的开/关声音?