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