我的表格是这样的,每个product_id用点分隔
------------------------
| product_id | price |
------------------------
| 1 | |
| 1.2 | |
| 1.2.1 | 1 |
| 1.2.2 | 2 |
| 1.2.3 | 1 |
| 1.3 | |
| 1.3.1 | 1 |
| 1.3.2 | 1 |
我需要计算(求和)每个product_id所以我可以看到product_id的每一个头(product_id号的较小者),这是我想要的结果
------------------------
| product_id | price |
------------------------
| 1 | 6 |
| 1.2 | 4 |
| 1.2.1 | 1 |
| 1.2.2 | 2 |
| 1.2.3 | 1 |
| 1.3 | 2 |
| 1.3.1 | 1 |
| 1.3.2 | 1 |
我应该使用什么sql语句..?
答案 0 :(得分:2)
这个sql:
SELECT parent.product_id, sum(child.price) as price
FROM Table1 AS parent left join Table1 AS child
on child.product_id like parent.product_id & "*"
group by parent.product_id
union
select product_id, price
from table1
where price is not null
order by product_id
;
为您的样本数据生成所需的输出。
注意一些在构建SQL查询时有用的东西:
使用UNION组合结果集的两个独立部分。
使用GROUP BY生成小计。
在JOIN子句中使用LIKE会导致大型数据集出现性能问题。这可以通过从详细的 product_id 值到子总体层次结构创建永久映射表来缓解;实质上,从价格表中删除小计的product_id行。