SQL中如何动态查询消费覆盖场所数最多的合作方名单
问题分析
现有代码的逻辑缺失和错误点
- 字段名引用错误:数据表的场所字段为
PlaceName,你在子查询中错误写为Place,执行时会直接抛出字段不存在的报错。 - 缺少最大值筛选逻辑:现有代码仅统计了每个合作方的有消费记录场所数量、按数量倒序排序,会返回所有有消费记录的合作方,没有筛选出仅达到最大数量的合作方,不符合需求要求。
修正逻辑说明
你需要先统计所有合作方对应的有消费场所数量,再提取出数量等于最大值的合作方即可,参考实现代码如下:
-- 方案1:使用RANK窗口函数实现,兼容大部分主流SQL引擎 SELECT Partner, num_of_sites FROM ( SELECT Partner, COUNT(DISTINCT PlaceName) AS num_of_sites, -- 按场所数量倒序排名,相同数量排名一致 RANK() OVER(ORDER BY COUNT(DISTINCT PlaceName) DESC) AS rank_num FROM TableA WHERE Money > 0 GROUP BY Partner ) t WHERE rank_num = 1
-- 方案2:使用子查询匹配最大值,兼容性更高 SELECT Partner, COUNT(DISTINCT PlaceName) AS num_of_sites FROM TableA WHERE Money > 0 GROUP BY Partner HAVING COUNT(DISTINCT PlaceName) = ( SELECT MAX(site_count) FROM ( SELECT COUNT(DISTINCT PlaceName) AS site_count FROM TableA WHERE Money > 0 GROUP BY Partner ) t )
内容的提问来源于stack exchange,提问作者AlisonGrey
相关产品推荐
相关产品推荐

