业务场景:
课程关联多个班级,班级记录库存,下架状态,删除状态等,某个课程上关联的班级只要有一个库存大于0并且是在售即算该课程为可售状态;课程上记录销量
要求:
按照特定学科或者全部学科推荐在售(非下架状态,库存>0)的,销量前10的课程课程,
select p.min_age, p.max_age,p.sale_num,p.name,p.category_id ,p.test_flag ,k.stock_surplus,p.`id` ,p.`end_date`,p.`end_time`,
p.`effective_duration`, p.`code`,p.`content`,p.`course_type`,p.`end_time`,p.`deleted`,p.`disable`,p.`heat`,p.`hide`,p.`introduction`,p.`join_type`,p.`org_code`,p.`score`,p.`start_date`,p.`status`
from product_spu p
#联合查询班级表
INNER JOIN product_sku k ON p.`id` = k.`spu_id`
where p.deleted=0 and p.disable=0 and p.hide=0 and p.status=2 and p.test_flag=0
-- and (p.min_age >=13 or max_age >=13)
and((p.min_age <= 10 and 10<= p.max_age) or (p.min_age <= 13 and 13<= p.max_age))
and p.`category_id` in (8,9,10,1)
group by p.`id`
#判断课程关联的班级中有至少一个班级是在售
having count(k.status=2 and k.deleted=0 and k.disable=0 and k.hide=0 and k.stock_surplus >0 or NULL )>0
order by sale_num DESC limit 10
知识点:
1、group by having用法,写在where语句后面,分组
2、count里面是表达式时,写法:表达式+or NULL
3、前10,limit 10