MySQL:如何获取Top 10产品对应的唯一产品类型?
获取Top10产品对应的唯一产品类型列表
核心思路是先筛选出前10个高分产品,再基于这些产品关联产品类型表并去重,避免直接在全局关联后限制数量的问题。
方法一:子查询实现
SELECT DISTINCT pt.type_name FROM ( -- 先按score降序取前10个产品的类型ID SELECT product_type_id FROM products ORDER BY score DESC LIMIT 10 ) AS top_products INNER JOIN product_types pt ON top_products.product_type_id = pt.id;
方法二:CTE(公共表表达式)实现(可读性更强)
WITH top_products AS ( SELECT product_type_id FROM products ORDER BY score DESC LIMIT 10 ) SELECT DISTINCT pt.type_name FROM top_products JOIN product_types pt ON top_products.product_type_id = pt.id;
为什么之前的方法失效?
你之前直接在主查询中加DISTINCT type_name和LIMIT,逻辑是先对所有产品关联类型后去重,再截取指定数量的类型,这和“先取Top10产品再拿对应类型”的需求完全相反。上面两种写法都是先锁定前10个产品,再基于这个子集去获取对应的唯一类型,完全匹配需求。
内容的提问来源于stack exchange,提问作者Mr Fett
相关产品推荐
相关产品推荐

