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

Access中按区域统计唯一房产ID数量的技术问题及SQL修正需求

按区域统计唯一房产数量的Access SQL解决方案

问题描述

需要按区域统计唯一PropertyID的数量,示例数据集预期结果:西雅图返回1,北加州返回2,路易斯安那返回1。此前用Excel公式标记重复项再透视的方法因数据量过大崩溃,现有Access SQL语句结果与预期不符,需修正。

示例数据集

Market AreaPropertyID
Seattle123
North Cali456
Louisiana115
North Cali456
North Cali789

原SQL问题分析

原SQL语句:

SELECT DISTINCT Count(PropertyID) AS UniqueHomes, MarketArea
FROM AR
WHERE (((AR.invdate)>=#3/1/2022# And (AR.invdate)<=#2/28/2023#))
GROUP BY MarketArea;

存在两个核心问题:

  • SELECT DISTINCT无效:GROUP BY MarketArea已经确保每个区域仅返回一行结果,DISTINCT在此处无意义。
  • Count(PropertyID)统计的是该区域所有符合日期条件的记录数(包含重复PropertyID),而非唯一值数量,因此结果与预期不符。

修正后的SQL方案

方案一:子查询去重后统计(兼容所有Access版本)

先通过子查询提取每个区域的唯一PropertyID,再对去重后的结果按区域统计数量:

SELECT MarketArea, COUNT(PropertyID) AS UniqueHomes
FROM (
    -- 先获取符合日期条件的唯一区域-房产ID组合
    SELECT DISTINCT MarketArea, PropertyID
    FROM AR
    WHERE invdate >= #3/1/2022# AND invdate <= #2/28/2023#
) AS UniquePropertyGroups
GROUP BY MarketArea;

方案二:直接使用COUNT(DISTINCT)(部分Access版本支持)

若使用的Access版本支持COUNT(DISTINCT 字段)语法,可简化为:

SELECT MarketArea, COUNT(DISTINCT PropertyID) AS UniqueHomes
FROM AR
WHERE invdate >= #3/1/2022# AND invdate <= #2/28/2023#
GROUP BY MarketArea;

结果验证

针对示例数据集(假设所有记录均符合日期条件),两种方案均会返回:

MarketAreaUniqueHomes
Seattle1
North Cali2
Louisiana1

完全符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:21