MySQL SQL测试题求助:如何统计不同在售商品数量对应的卖家数量?
嘿,我来帮你搞定这个MySQL统计问题~
首先咱们得明确需求的核心逻辑:先算出每个卖家有多少在售商品,然后再统计有多少个卖家对应某个商品数量,也就是最终输出里的num_sellers(对应商品数量的卖家数)和items_offered(商品数量)。
你想用CTE的思路是完全正确的,可能之前的写法在二次分组或者字段处理上出了问题,给你一个可行的CTE方案:
WITH seller_item_counts AS ( -- 第一步:统计每个卖家的在售商品数量 SELECT seller_id, COUNT(*) AS items_offered FROM ITEMS GROUP BY seller_id ) -- 第二步:对每个商品数量,统计对应的卖家数量 SELECT COUNT(*) AS num_sellers, items_offered FROM seller_item_counts GROUP BY items_offered ORDER BY items_offered;
补充说明:
- 如果需要确保统计的是存在的卖家(避免
ITEMS里的seller_id在SELLERS表中不存在的无效数据),可以在CTE里加上JOIN关联SELLERS表:
WITH seller_item_counts AS ( SELECT i.seller_id, COUNT(*) AS items_offered FROM ITEMS i INNER JOIN SELLERS s ON i.seller_id = s.id GROUP BY i.seller_id ) SELECT COUNT(*) AS num_sellers, items_offered FROM seller_item_counts GROUP BY items_offered ORDER BY items_offered;
- 如果你不想用CTE,用子查询的写法也能达到同样效果:
SELECT COUNT(*) AS num_sellers, items_offered FROM ( SELECT seller_id, COUNT(*) AS items_offered FROM ITEMS GROUP BY seller_id ) AS seller_items GROUP BY items_offered ORDER BY items_offered;
大概率你之前的问题是没做二次分组——只统计了每个卖家的商品数,但没对这个结果再按商品数量分组统计卖家数,或者字段名和要求的输出不匹配,调整一下应该就能通过啦~
内容的提问来源于stack exchange,提问作者lugger1
相关产品推荐
相关产品推荐

