monetdb - 如何在总行中使用“按组分组”和“有”?
问题描述
我创建了这个 SQL 命令:
select
product_category_name a,
count(product_id) b
from
sys.odeds_2_20210811095253
group by
grouping sets ((product_category_name), ())
结果是这样的:
a b
-------------------
Eletrônico 74
Escritório 70
Fruta 310
Limpeza 37
Utensílio 69
Ferramenta 39
Laticínio 32
Bebida 72
Móvel 27
Grãos 53
Higiene 57
Informática 64
Farmácia 26
Verdura 23
Vestuário 23
Brinquedo 13
Veículo 11
<null> 1000
是正确的。但是,现在我想对组进行过滤。然后我将命令更改为如下所示:
select
product_category_name a,
count(product_id) b
from
sys.odeds_2_20210811095253
group by
grouping sets ((product_category_name), ())
having
grouping(product_category_name) = 1 or count(product_id) between 40 and 60
结果是这样的:
a b
---------------
Grãos 53
Higiene 57
<null> 1000
但是,最后一行的结果并不像我预期的那样。我希望最后一行返回“110”(对应于 53 + 57)而不是“1000”。
有人可以帮我解决这个挑战吗?
解决方案
have 子句正在对分组集进行过滤,所以我认为该查询不会完成这项工作。您可以改用以下查询。我又添加了一个子查询,因为我不喜欢使用 having 子句,所以它在通用表达式消除上少了一个优化步骤;)
with totals(a, b) as
(
select a, b from
(
select
product_category_name a,
count(product_id) b
from
sys.odeds_2_20210811095253
group by
product_category_name
) sub(a, b)
where b between 40 and 60
)
select a, b from totals
union all
select null, sum(b) from totals;
推荐阅读
- angularjs - 当我有黄瓜和硒时,为什么我需要量角器?
- rest - 在 REST 查询中指定数据结构
- javascript - 如何避免由于http请求无限循环导致浏览器无响应
- elasticsearch - 文本字段上的弹性搜索关键字搜索不返回结果
- ruby-on-rails - 如何显示与同一标签相关的用户任务?
- javascript - res.json 不是一个函数 - nodejs
- javascript - 如何隐藏按钮,直到所有字段都被填充以对钩子做出反应
- c++ - 如何在 OSX 10.15 中使用 Clang -Wno-nullability-completeness 选项编译整个 R 源代码包
- android - Android 通知 Firebase Cloud
- javascript - 下面代码的输出是什么?