如何将计数列包含在过滤器中以计算总数中的百分比,其中总数在 Snowflake 中具有不同的过滤器?

问题描述 投票:0回答:1

仓库数据库中有多个波次。每波都有一定数量的纸箱,需要从仓库中取出并运送到指定区域,纸箱中的物品将被消耗。数据库结构是基于任务的。因此任务编号包含波次、箱号、箱内数量、消耗数量、任务状态。当状态为 0 时,启动任务,当状态为 1 时,将纸箱扔到某个地方并消耗数量。因此纸箱中的数量和消耗的数量发生了变化。两列可以相等,表明纸箱中的数量已完全消耗并且纸箱已损坏。如果没有,那就去预订。我想知道有多少病例被保留以及每波的百分比。

我正在使用以下查询:

SELECT wave, COUNT(carton) 
From Database 
WHERE task NOT LIKE '%K%' 
AND status = '1' 
AND quantity_inCarton != quantity_consumed 
GROUP BY wave

产生

挥挥手,不。要预订的纸箱数量

我想包括另一列,显示没有的百分比。总纸箱中要保留的纸箱数量(该波中的总纸箱数量可以通过状态 = 1 和不包含字母 K 的任务编号进行过滤)

基本上,

过滤器 1 - 不带字母 K 的任务编号和编号为 1 的状态给出了该批次中的纸箱总数

过滤器 2 - 过滤器 1 + 装箱数量 != 消耗数量给出了要预订的箱子。

谢谢你。

sql nested snowflake-cloud-data-platform warehouse
1个回答
0
投票

用我提出的解决方案修改您上面的评论。 我不能保证你在 case 语句中的逻辑,但这就是我对 1 和 0 的理解。另外,我用第一个表达式作为第二个表达式的分子:

SELECT wave
     , SUM(CASE WHEN status = '1' AND task NOT LIKE '%K%' AND quantity_inCarton != quantity_consumed THEN 1 ELSE 0 END) as exp1
     , 100 * exp1 / SUM(CASE WHEN status = '1' AND task NOT LIKE '%K%' THEN 1 ELSE 0 END)
FROM Database 
GROUP BY wave;

您可能还想在分母周围使用

NULLIF
来处理分母的 0/溢出问题。

© www.soinside.com 2019 - 2024. All rights reserved.