sql - 如何在 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
。我怎么才能得到它?
解决方案
修复你的数据模型!在单个列中存储多个值是一个坏、坏、坏的主意。
但有时,我们会被其他人非常糟糕、糟糕的数据模型所困。如果是这种情况,您可以使用如下逻辑:
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;
推荐阅读
- javascript - 如何从标签中减去值?
- javascript - 混合测验 Vue.js 中的答案顺序
- oop - 没有调用 'std::queue 的匹配函数
::推(空)' - reactjs - Elastic React Search UI - 如何实现 autocompleteMinimumCharacters
- python - gunicorn Flask 应用程序在 Docker 中挂起
- javascript - 如何将字符串显示为其 unicode 代码点?
- python - Spark写入CSV:字符串cols中的逗号被用作分隔符
- ant - SonarQube 代码覆盖率 - 排除某些类
- php - WordPress 类别未显示在侧边栏中
- php - 使用 PDO 将数据插入数据库 php