MySQL如何查询在售商品数最多的用户并展示其对应商品及售价
需求说明
筛选出售卖商品数量最多的用户,同时展示该用户名下所有在售商品及对应售价。
原SQL存在的问题
- 聚合函数
COUNT()未搭配GROUP BY使用,直接在排序中调用会触发SQL语法错误(除非是兼容非标准SQL的数据库配置,否则无法正常执行) - 仅做了排序处理,没有匹配的筛选逻辑,无法仅保留售卖商品数量最多的用户的商品数据
实现方案
单卖家最多场景(仅取排在第一位的卖家)
如果仅需要取排序第一的单个卖家(即使有多个卖家商品数量并列最多也只取一个),可以使用以下SQL:
SELECT i.item_id, i.item_name, i.item_price, u.user_id FROM item i JOIN user u ON i.user_id_seller = u.user_id WHERE i.user_id_seller = ( -- 子查询统计每个卖家的商品数,取数量最高的卖家ID SELECT user_id_seller FROM item GROUP BY user_id_seller ORDER BY COUNT(item_id) DESC LIMIT 1 );
多卖家并列最多场景
如果需要覆盖多个卖家商品数量并列最多的情况,可以使用以下兼容逻辑:
SELECT i.item_id, i.item_name, i.item_price, u.user_id FROM item i JOIN user u ON i.user_id_seller = u.user_id WHERE i.user_id_seller IN ( SELECT user_id_seller FROM item GROUP BY user_id_seller HAVING COUNT(item_id) = ( -- 子查询计算所有卖家的最大在售商品数 SELECT MAX(sell_count) FROM ( SELECT COUNT(item_id) AS sell_count FROM item GROUP BY user_id_seller ) AS temp_count ) );
逻辑说明
- 先通过聚合统计得到每个卖家的在售商品数量,匹配得到数量最高的卖家ID列表
- 关联商品表和用户表,拉取符合条件的卖家对应的全量在售商品及售价信息
内容的提问来源于stack exchange,提问作者AlecSel
相关产品推荐
相关产品推荐

