我们有两张桌子,第一个是
products (pro_id,pro_name,supleir_id,quantity,unit,price,enter_date)
第二个表是
customers(cus_id,cus_name,purchased_item,pro_id,quantity,total_price,date,invoice)
我们想使用 PLSQL 创建一个过程来了解客户购买的产品较少
答案 0 :(得分:0)
我认为“较少购买”是指出现次数最少的产品 ID。但是,这是否意味着从客户那里购买的最低次数(pro_id 的计数)或最低的销售商品数量(数量总和)仍然不明确。
无论哪种方式,一种方法都会对目标值进行排名,然后仅选择排名最低的行。它创建一个子查询因子(通常称为 CTE)以按数量对来自客户表的产品进行排名。然后将结果与 Product 表连接起来。 (见Demo)
with less_purchased(pro_id, number_purchased) as
( select pro_id, cnt
from (-- rank each product by quantity
select pro_id, cnt, dense_rank() over( order by cnt desc) rnk
from (-- get sum of quantity for each product
select pro_id, sum(quantity) cnt
from customers
group by pro_id
) sum_query
) rank_query
-- discard all but rank 1
where rnk = 1
)
-- get product information and quantity purchased
select p.*, lp.number_purchased
from products p
join less_purchased lp on (lp.pro_id = p.pro_id);
以上可能会产生具有多个产品行的输出,因为具有相同数量的产品将具有相同的等级。
要获得相同的购买次数,请将 sum(quantity) 替换为 count(*) 并删除 desc 或 order by。