You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL分组查询:如何筛选出拥有多个分店的店铺数据

筛选拥有多个分店的店铺数据的SQL实现方案

刚好碰到过类似的需求,给你两种靠谱的实现方式,都能精准筛选出你要的结果:

方法一:子查询关联法(兼容大部分数据库)

这种方法先统计每个店铺(按store_name+country分组)的分店数量,再筛选出分店数大于1的店铺,最后关联原表获取所有对应记录:

SELECT s.*
FROM `store` s
JOIN (
    -- 先找出分店数>1的店铺(按store_name和country分组)
    SELECT `store_name`, `country`
    FROM `store`
    GROUP BY `store_name`, `country`
    HAVING COUNT(`branch`) > 1
) AS sub 
ON s.`store_name` = sub.`store_name` AND s.`country` = sub.`country`
ORDER BY s.`store_name`, s.`branch`;

逻辑说明:

  1. 子查询里通过GROUP BY按店铺名称和国家分组,用HAVING COUNT(branch) > 1过滤出拥有多个分店的店铺组合;
  2. 原表store和这个子查询做关联,只保留那些在子查询里的店铺的所有分店记录。

方法二:窗口函数法(适用于支持窗口函数的数据库,如MySQL8.0+、PostgreSQL等)

如果你的数据库支持窗口函数,这种写法更简洁,性能也更优:

SELECT `store_name`, `country`, `branch`
FROM (
    -- 给每条记录标记其所属店铺的分店总数
    SELECT 
        *,
        COUNT(*) OVER(PARTITION BY `store_name`, `country`) AS branch_count
    FROM `store`
) AS sub
-- 只保留分店总数>1的记录
WHERE branch_count > 1
ORDER BY `store_name`, `branch`;

逻辑说明:

  1. 内层查询用PARTITION BY store_name, country将数据按店铺和国家分区,COUNT(*) OVER()计算每个分区内的行数(也就是该店铺的分店数);
  2. 外层查询直接过滤出branch_count > 1的行,就能得到所有多分店店铺的记录。

两种方法都能得到你预期的查询结果,你可以根据自己使用的数据库版本选择合适的方案~

内容的提问来源于stack exchange,提问作者Autodesk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:32:26