mysql 按非重复聚合查询中的sql表

bvjveswy  于 2023-03-22  发布在  Mysql
关注(0)|答案(2)|浏览(126)

我在sql中有三个表

order_table (order_id, product_id, amount)
products_table (product_id, name, price_usd),
all_orders (order_id, customer_id, order_date, total_amount),

我想生成一个sql查询,输出过去12个月每个产品的每月总收入。
我不知何故需要分离出不同的产品,但我不知道如何构造这样的查询。
任何提示都很好

nnt7mjpx

nnt7mjpx1#

您需要首先创建base_table,其中包含所有必要的列。您可以使用CTE创建使用with创建此列。之后,您可以对所需的列求和并使用**where date〉= date_sub(current_date(),interval 12 month)**结束它
一般查询如下:

with base as (SELECT
  all_orders.order_id,
  date_trunc(all_orders.order_date,month) as order_date,
  all_orders.total_amount as quantity
  name as product_name,
  price_usd * total_amount as revenue
FROM
  all_orders
LEFT JOIN
  order_table
USING
  (order_id)
LEFT JOIN 
  products_table 
USING 
  (product_id))

select order_date, product_name, sum(total_amount) as total_quantity, sum(revenue) as total_revenue from base 
where order_date >= date_sub(current_date(), interval 12 month)
group by 1,2
  • 请注意,我使用的是Google SQL Dialect。它可能与您当前使用的方言略有不同 *
dy2hfwbg

dy2hfwbg2#

给出的answer使用的是WITH....,这是不需要的:

select 
   date_trunc(all_orders.order_date,month) as order_date, 
   name as product_name, 
   sum(total_amount) as total_quantity, 
   sum(price_usd * total_amount) as total_revenue 
from all_orders
LEFT JOIN order_table USING (order_id)
LEFT JOIN products_table USING (product_id))
where all_orders.order_date >= date_sub(current_date(), interval 12 month)
group by 1,2 ;

应该做同样的事情(未经测试)

相关问题