【问题标题】:Give a Conditional SUM on spesifict product or Item给出特定产品或项目的条件总和
【发布时间】: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
  • 哦 - 所以产品ac 很特别,其余的都属于“其他”类别?您是否需要在查询中对ac 进行硬编码,或者它们是用户在运行时给出的,还是它们来自哪里?而且,在输出中,您是否希望所有其他产品 (b, d, e) 的“名称”出现在第一列,就像您显示的输出一样?可以做到,只是看起来很奇怪(而且,产品名称越长,字符串可能就太长了)。
  • yap,我考虑一下这个查询的性能,也许这对我来说是一个临时解决方案,我可以将产品本身作为参数输入(动态)

标签: sql oracle aggregate-functions


【解决方案1】:

您可以使用 CASE 语句对您的特定项目进行分组。如果需要,您可以添加多个组。你不需要子查询。

select CASE WHEN ProductName IN ('c','d','e') THEN 'bde' ELSE  ProductName END,
SUM(Quentity) from product
group by CASE WHEN ProductName IN ('c','d','e') THEN 'bde' ELSE  ProductName END
;

【讨论】:

  • 啊,分组时忘记添加大小写了,谢谢,这个也可以
猜你喜欢
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多