首页 > 解决方案 > 如何在 Oracle SQL 中使用总成本进行分组

问题描述

我在 Oracle 中有两个表。一个命名orders_new是一个表格,其中包含该日期订单中包含的产品名称:

+----------+---------------------+-----------+
| ORDER_ID |  PRODUCTSPURCHASED  | ORDERDATE |
+----------+---------------------+-----------+
|     1001 | rice,sugar,facewash | 20-AUG-20 |
|     1002 | sanitizer,handwash  | 21-JUL-20 |
|     1003 | dal                 | 01-MAY-20 |
|     1004 | facewash,handwash   | 22-AUG-20 |
|     1005 | sugar,facemask      | 0         |
+----------+---------------------+-----------+

而且我还有其他表名为products_new- 按月计算的产品价格:

+-------------+--------------+-------+
| PRODUCTNAME | PRODUCTPRICE | MONTH |
+-------------+--------------+-------+
| rice        |          100 | jul   |
| rice        |          110 | aug   |
| sugar       |           40 | feb   |
| sugar       |           50 | apr   |
| sugar       |           60 | aug   |
| facewash    |          110 | jul   |
| facewash    |          100 | aug   |
| sanitizer   |          200 | jul   |
| sanitizer   |          190 | aug   |
| handwash    |           50 | jul   |
| handwash    |          100 | aug   |
| dal         |           40 | may   |
| dal         |           45 | jun   |
| dal         |           50 | jul   |
| dal         |           55 | aug   |
| facemask    |           15 | feb   |
| facemask    |           20 | jul   |
| facemask    |           25 | aug   |
+-------------+--------------+-------+

我希望输出表按 withorder_id分组totalcost。我怎么才能得到它?

标签: sqloracle

解决方案


修复你的数据模型!在单个列中存储多个值是一个坏、坏、坏的主意。

但有时,我们会被其他人非常糟糕、糟糕的数据模型所困。如果是这种情况,您可以使用如下逻辑:

select o.order_id, sum(p.price)
from orders_new o left jion
     products_new p
     on ',' || replace(o.PRODUCTSPURCHASED, ', ', ',') || ',' like '%,' || p.productname || ',%'

请注意,这既解决了分隔符的问题,也解决了分隔符不一致的事实(逗号和逗号空格)。

但是,您应该努力修复数据模型,方法是使用一个联结/关联表,每个订单/产品组合有一行。

group by o.order_id;

推荐阅读