如何条件聚合统计并返回全量行?筛选管理餐厅数达标的餐厅数据
解决方法
方法一:子查询关联
先通过子查询统计出符合条件的经理ID,再关联原表获取所有餐厅记录:
SELECT m.restaurant_id, m.manager_id FROM Manager_Restaurant m JOIN ( SELECT manager_id, COUNT(restaurant_id) AS restaurant_count FROM Manager_Restaurant GROUP BY manager_id HAVING restaurant_count > 1 AND restaurant_count <= 5 ) t ON m.manager_id = t.manager_id;
方法二:窗口函数
利用窗口函数直接为每一行计算对应经理的餐厅总数,再筛选符合条件的记录:
SELECT restaurant_id, manager_id FROM ( SELECT restaurant_id, manager_id, COUNT(restaurant_id) OVER(PARTITION BY manager_id) AS restaurant_count FROM Manager_Restaurant ) t WHERE restaurant_count > 1 AND restaurant_count <= 5;
原SQL问题说明
你之前的SQL用GROUP BY manager_id后,每个经理只会返回一行结果,而且restaurant_id不属于分组字段(多数数据库会直接报错),因此无法获取该经理的所有餐厅ID。上面两种方法都能避免这个问题,返回符合条件经理的全部餐厅记录。
内容的提问来源于stack exchange,提问作者smonff
相关产品推荐
相关产品推荐

