SQL实现按条件替换重复房产售价:拆分总价至各重复行
解决方案:拆分重复总售价为单套价格
要实现将同一交易的总售价拆分到每一行(单套房产价格),核心是先统计每组(同一买家同一交易)的房产套数,再用总售价除以套数得到单套价格。以下是具体实现:
修改后的SQL代码
WITH SaleGroupCTE AS ( SELECT *, -- 统计当前交易(同一买家+同一交易编号)的房产总套数 COUNT(*) OVER (PARTITION BY LegalReference, OwnerName) AS total_units, -- 计算单套房产价格,转换为高精度小数避免整数除法误差 CAST(SalePrice AS DECIMAL(18,2)) / COUNT(*) OVER (PARTITION BY LegalReference, OwnerName) AS SingleUnitSalePrice FROM DataCleaning..NashvilleHousing ) -- 替换原SalePrice为单套价格,输出所需字段 SELECT ParcelID, PropertyAddress, OwnerName, LegalReference, SingleUnitSalePrice AS SalePrice, total_units FROM SaleGroupCTE ORDER BY SalePrice DESC;
关键说明
- 分组逻辑优化:用
LegalReference(交易编号)+OwnerName作为分组依据,比原代码的SalePrice, LegalReference, OwnerName更严谨——避免不同交易恰好售价相同导致分组错误。 - 套数统计:
COUNT(*) OVER (PARTITION BY ...)直接返回当前行所在分组的总行数(即房产套数),替代原代码的ROW_NUMBER()(仅生成行号,无法直接得到总套数)。 - 除法精度处理:将
SalePrice转换为DECIMAL(18,2),避免SQL整数除法导致的精度丢失(例如总售价100、3套时,整数除法会得到33,转换后得到33.33)。 - 求和验证:每组单套价格求和后完全等于原总售价,满足数据分析需求。
内容的提问来源于stack exchange,提问作者Nach0000
相关产品推荐
相关产品推荐

