背景:
商品分类表
商品表
用户收藏商品表
需求 :
根据用户收藏的商品,统计出用户各类商品收藏数量
商品的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;
查询效果