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

获取出现次数最少的邮政编码及对应计数的SQL查询问题

解决住房数据中获取出现次数最少的邮政编码及计数值的问题

我完全懂你的困扰——想找出住房数据里出现次数最少的所有邮政编码,以及它们统一的计数值,但之前的查询只拿到了最小次数,没把对应的邮编都关联出来对吧?这确实是因为单纯用GROUP BY搭配MIN()的话,没法捕获所有并列最小次数的邮编记录。下面给你两种实用的解决方法,适配不同的数据库场景:

方法1:嵌套子查询筛选

先通过内层子查询算出每个邮政编码的出现次数,再拿到这些次数里的最小值,最后筛选出计数等于这个最小值的邮编和对应次数:

SELECT zip_code, COUNT(*) AS occurrence_count
FROM housing_data
GROUP BY zip_code
HAVING COUNT(*) = (
    -- 先获取所有邮编的出现次数,再取其中的最小值
    SELECT MIN(zip_count)
    FROM (
        SELECT COUNT(*) AS zip_count
        FROM housing_data
        GROUP BY zip_code
    ) AS zip_count_subquery
);

方法2:窗口函数(推荐,适合现代数据库)

如果你的数据库支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server等),用RANK()窗口函数会更简洁直观,它能直接给所有并列最小次数的邮编标记相同的排名:

-- 先用CTE计算每个邮编的次数和排名
WITH zip_occurrences AS (
    SELECT 
        zip_code, 
        COUNT(*) AS occurrence_count,
        -- 按出现次数升序排名,次数最小的排名为1
        RANK() OVER (ORDER BY COUNT(*) ASC) AS rank_num
    FROM housing_data
    GROUP BY zip_code
)
-- 筛选出排名为1的记录,就是所有出现次数最少的邮编
SELECT zip_code, occurrence_count
FROM zip_occurrences
WHERE rank_num = 1;

如果你的数据库不支持CTE(公共表表达式),也可以把CTE部分改成子查询,效果完全一致。

注意事项

记得把代码里的housing_data替换成你的实际表名,zip_code替换成数据中存储邮政编码的字段名哦。

内容的提问来源于stack exchange,提问作者The Statistician Magician

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:54