ls_order_sku 下有 sku_id,order_id字段 order_id 和 ls_order表的id字段关联 ls_order 有create_time字段 sku_id 和 ls_sku表的 id字段关联 ls_sku的 spu_id字段 和 ls_spu表的 id字段关联 product_line_id 和 ls_product_line表的id字段关联 我要根据created_time 计算出 当天,当周,当月,当年分别销售额, 并根据product_line_id 分组,展示product_line_id,ls_product_line表的name字段,以及聚合的值(保留两位小数), 我想用一条sql实现怎么编写sql
时间: 2023-08-16 21:06:30 浏览: 119
以下是可以实现你要求的 SQL 语句:
```sql
SELECT
pl.id AS product_line_id,
pl.name AS product_line_name,
ROUND(SUM(s.price * od.quantity), 2) AS daily_sales,
ROUND(SUM(s.price * od.quantity) OVER (PARTITION BY pl.id, DATE_TRUNC('week', o.create_time)), 2) AS weekly_sales,
ROUND(SUM(s.price * od.quantity) OVER (PARTITION BY pl.id, DATE_TRUNC('month', o.create_time)), 2) AS monthly_sales,
ROUND(SUM(s.price * od.quantity) OVER (PARTITION BY pl.id, DATE_TRUNC('year', o.create_time)), 2) AS yearly_sales
FROM
ls_order_sku AS od
JOIN
ls_order AS o ON o.id = od.order_id
JOIN
ls_sku AS s ON s.id = od.sku_id
JOIN
ls_spu AS sp ON sp.id = s.spu_id
JOIN
ls_product_line AS pl ON pl.id = s.product_line_id
GROUP BY
pl.id,
pl.name,
DATE_TRUNC('day', o.create_time)
ORDER BY
pl.id,
DATE_TRUNC('day', o.create_time)
```
注意:
1. 我们在 `SELECT` 语句中使用了 `ROUND` 函数来保留两位小数。
2. 其他部分和之前的 SQL 语句一样,仍然使用了多个表的 `JOIN`,使用了 `GROUP BY` 和聚合函数 `SUM` 计算出了每个产品线在不同时间范围内的销售额。
阅读全文