我如何找出商店中购买较少的商品؟

时间:2021-06-20 15:43:18

标签: sql oracle plsql

我们有两张桌子,第一个是

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 创建一个过程来了解客户购买的产品较少

1 个答案:

答案 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。