重新写一个sql 根据传递过来的参数 有Date类型的某年某月 和memberId 在三张订单表里面获取数据 回显的数据要有 会员当月所有的订单金额,会员所有的当月总消费次数 并且还要获得当月会员在这三张订单表的消费总额 根据三个不同的消费总额 再和会员当月所有的订单金额 进行求比 算出对应比例 数据库使用的postgresql
时间: 2024-03-14 17:44:32 浏览: 66
SQL高级应用之同服务器上复制表到另一数据库中并实现去重复
假设三张订单表分别为order1,order2,order3,订单表中的会员ID为member_id,订单金额为amount,订单创建时间为create_time。
可以使用以下SQL查询语句来获取数据:
```
SELECT
SUM(amount) AS total_order_amount,
COUNT(*) AS total_order_count,
SUM(total_amount) AS total_month_amount,
SUM(amount) / NULLIF(SUM(total_amount), 0) AS ratio
FROM (
SELECT
amount,
DATE_TRUNC('month', create_time) AS month,
member_id,
SUM(amount) OVER (PARTITION BY member_id, DATE_TRUNC('month', create_time)) AS total_amount
FROM
(
SELECT amount, create_time, member_id FROM order1 WHERE member_id = $1 AND DATE_TRUNC('month', create_time) = $2
UNION ALL
SELECT amount, create_time, member_id FROM order2 WHERE member_id = $1 AND DATE_TRUNC('month', create_time) = $2
UNION ALL
SELECT amount, create_time, member_id FROM order3 WHERE member_id = $1 AND DATE_TRUNC('month', create_time) = $2
) subquery
) subquery2
GROUP BY member_id, month
```
其中,$1和$2是传递过来的参数,$1表示memberId,$2表示Date类型的某年某月,例如'2021-01-01'。
这个查询语句的作用是先将三张订单表中符合条件的订单按照会员ID和月份分组,并计算出每个会员在当月的总消费额。然后将每个会员的订单金额和总消费额相除,得到对应比例。最后将所有会员的数据合并,并计算出当月会员所有订单的总金额和总数量,以及当月所有会员的总消费额。
需要注意的是,这个查询语句中用到了窗口函数和UNION ALL操作符,需要确保在PostgreSQL中这些特性是可用的。
阅读全文