【发布时间】:2021-06-03 18:32:50
【问题描述】:
我有一张这样的桌子
Product Quantity
a 2
b 3
c 4
d 1
e 5
我想知道如何对 c、d 和 e 等特定产品求和。
我已经在尝试了
SELECT sum(quantity)
FROM product
where product.product in ('a', 'b')
group by product
UNION
select sum(quantity)
from product
where product.product IN ('c', 'd', 'e')
但我不能显示产品名称,结果应该是这样的
Product Quantity
a 2
b 3
sum(c,d,e) (4+1+5)
【问题讨论】:
-
因此,您想要创建产品子集(其中一些只有一个元素,但这不相关),并对这些子集求和。您在哪里/如何存储有关哪些产品在哪个子集中的信息?一种常见的方法是一个小的查找表,显示产品及其所属的子集。如果是这样,那么您将加入这两个表,并按第二个表中的“子集”列分组。
-
解决问题,使用子查询
select product, sum(quantity) value from (select case when a.product not in ('a', 'b') then 'Other''s Product' else a.product end product, a.quantity quantity, case when a.product not in ('a', 'b') then 'sum' end validasi from product a) group by validasi, product -
哦 - 所以产品
a和c很特别,其余的都属于“其他”类别?您是否需要在查询中对a和c进行硬编码,或者它们是用户在运行时给出的,还是它们来自哪里?而且,在输出中,您是否希望所有其他产品 (b, d, e) 的“名称”出现在第一列,就像您显示的输出一样?可以做到,只是看起来很奇怪(而且,产品名称越长,字符串可能就太长了)。 -
yap,我考虑一下这个查询的性能,也许这对我来说是一个临时解决方案,我可以将产品本身作为参数输入(动态)
标签: sql oracle aggregate-functions