使用 1 SQL 查询连接 3 个表并找到为每个客户群产生最多收入的产品类别
Use 1 SQL query to join 3 tables and find the category of products that generates the most revenue for each customer segment
我正在为以下查询使用 SQLite3。
我有一个名为“products”的 table,看起来像这样:
我有一个名为“交易”的 table,看起来像这样:
我有一个名为“段”的 table,如下所示:
对于每个活跃的细分市场,我想找到产生最高收入的类别。
我想我知道如何在 3 个不同的查询中执行此操作。
create table table1 as
SELECT s.seg_name, p.category, t.item_qty * t.item_price as revenue
from segments s
JOIN
transactions t
on s.cust_id = t.cust_id
JOIN products p
on p.prod_id = t.prod_id
where s.active_flag = 'Y'
order by s.seg_name, p.category
;
create table table2 as
select seg_name, category, sum(revenue) as revenue
from table1
group by seg_name, category;
select seg_name, category, max(revenue) as revenue
from table2
group by seg_name;
如何在 1 个查询中完成?
这是一种方法:
select seg_name,category,revenue
from (
select
s.seg_name,
p.category,
sum(t.item_qty * t.item_price) as revenue,
rank() over (partition by seg_name order by sum(t.item_qty * t.item_price) desc) rn
from segments s
join transactions t on s.cust_id = t.cust_id
join products p on p.prod_id = t.prod_id
where s.active_flag = 'Y'
group by seg_name, p.category
) t where rn = 1
我正在为以下查询使用 SQLite3。
我有一个名为“products”的 table,看起来像这样:
我有一个名为“交易”的 table,看起来像这样:
我有一个名为“段”的 table,如下所示:
对于每个活跃的细分市场,我想找到产生最高收入的类别。
我想我知道如何在 3 个不同的查询中执行此操作。
create table table1 as
SELECT s.seg_name, p.category, t.item_qty * t.item_price as revenue
from segments s
JOIN
transactions t
on s.cust_id = t.cust_id
JOIN products p
on p.prod_id = t.prod_id
where s.active_flag = 'Y'
order by s.seg_name, p.category
;
create table table2 as
select seg_name, category, sum(revenue) as revenue
from table1
group by seg_name, category;
select seg_name, category, max(revenue) as revenue
from table2
group by seg_name;
如何在 1 个查询中完成?
这是一种方法:
select seg_name,category,revenue
from (
select
s.seg_name,
p.category,
sum(t.item_qty * t.item_price) as revenue,
rank() over (partition by seg_name order by sum(t.item_qty * t.item_price) desc) rn
from segments s
join transactions t on s.cust_id = t.cust_id
join products p on p.prod_id = t.prod_id
where s.active_flag = 'Y'
group by seg_name, p.category
) t where rn = 1