聚合条件,以防万一
aggregation condition in case when
我有一个结构类似于下面的数据集
fruit, value
apple, 234
apple, 2341
pear, 3233
grape, 323
pear, 3234
grap 1234
我正在尝试通过执行如下所示的查询来查找范围底部 10% 内的数字范围的计数。 (查询的最终目标是计算并查看 calc 的范围以 10% 的增量增加)我还有一个 group by 子句,所以我希望计数按水果分组并以这种方式聚合。下面是我试过的查询
select fruit, count(case when (value <= (((max(value) - min(value)) * .1) + min(value))) then 1 end)
from fruit_juice
group by substring(fruit, 5, 5);
聚合 from
子句中的 table 以获得您想要的限制。 Join
将这些结果返回给您的查询并将这些值用于查询:
select substring(fj.fruit, 5, 5),
sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1)
from fruit_juice fj join
(select substring(fruit, 5, 5) as fruit5,
max(value) as maxv, min(value) as minv
from fruit_juice
group by substring(fruit, 5, 5)
) fmm
on fmm.fruit5 = substring(fj.fruit, 5, 5)
group by substring(fruit, 5, 5);
请注意,您的 group by
表达式应与 select
子句中的表达式匹配。
编辑:
我不确定你问题中的 substring()
来自哪里,所以这个版本删除了它:
select fj.fruit, sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1)
from fruit_juice fj join
(select fruit,
max(value) as maxv, min(value) as minv
from fruit_juice
group by fruit
) fmm
on fmm.fruit = fj.fruit
group by fruit;
我有一个结构类似于下面的数据集
fruit, value
apple, 234
apple, 2341
pear, 3233
grape, 323
pear, 3234
grap 1234
我正在尝试通过执行如下所示的查询来查找范围底部 10% 内的数字范围的计数。 (查询的最终目标是计算并查看 calc 的范围以 10% 的增量增加)我还有一个 group by 子句,所以我希望计数按水果分组并以这种方式聚合。下面是我试过的查询
select fruit, count(case when (value <= (((max(value) - min(value)) * .1) + min(value))) then 1 end)
from fruit_juice
group by substring(fruit, 5, 5);
聚合 from
子句中的 table 以获得您想要的限制。 Join
将这些结果返回给您的查询并将这些值用于查询:
select substring(fj.fruit, 5, 5),
sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1)
from fruit_juice fj join
(select substring(fruit, 5, 5) as fruit5,
max(value) as maxv, min(value) as minv
from fruit_juice
group by substring(fruit, 5, 5)
) fmm
on fmm.fruit5 = substring(fj.fruit, 5, 5)
group by substring(fruit, 5, 5);
请注意,您的 group by
表达式应与 select
子句中的表达式匹配。
编辑:
我不确定你问题中的 substring()
来自哪里,所以这个版本删除了它:
select fj.fruit, sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1)
from fruit_juice fj join
(select fruit,
max(value) as maxv, min(value) as minv
from fruit_juice
group by fruit
) fmm
on fmm.fruit = fj.fruit
group by fruit;