根据商品编号模糊查询商品分类

背景:

商品分类表

商品表

用户收藏商品表

 

需求 :

根据用户收藏的商品,统计出用户各类商品收藏数量

商品的CATEID可以辨识出商品属于哪类商品

 

原先的sql

SELECT p.cateName,
	p.cateId,
	COUNT(*) i
FROM CN_SUPPLY_COLLECT c
	INNER JOIN cn_supplys s ON c.supplyId=s.supplyId
	INNER JOIN cn_code_category g ON s.cateId=g.cateId
	INNER JOIN cn_code_parent_category p ON g.topId    =p.cateId
WHERE c.userId='css3020536'
GROUP BY 
	p.cateName, p.cateId

 

多表关联查询效率低

商品的顶级分类 可以只有几个 但关联查询特别慢

于是SQL语句改为直接根据商品CATEID辨别出商品的分类

SELECT DECODE(pid , 'A','船舶设备','B', '船舶备件', 'C','船舶物资', 'D','船厂设备', NULL) CATENAME, 
  pid CATEID, 
  COUNT(pid) I 
FROM 
  (SELECT 
    CASE 
      WHEN instr(a.cateId, 'E50') = 1 
      THEN 'D' 
      WHEN instr(a.cateId, 'S') = 1 
      THEN 'B' 
      WHEN instr(a.cateId, 'G') = 1 
      THEN 'C' 
      WHEN instr(a.cateId, 'E') = 1 
      THEN 'A' 
      ELSE NULL 
    END pid 
  FROM CN_SUPPLY_COLLECT b 
  INNER JOIN cn_supplys a 
  ON a.supplyId  = b.supplyId 
  WHERE b.userId = 'css3020536' 
  ) 
GROUP BY PID;

 

查询效果


 

你可能感兴趣的:(oracle)