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

如何用SQL计算单州房产价格占总房产价格的百分比?

计算各州房产价格占总价格的比例

假设你的房产价格表名为property_prices,包含state(州名)和price(单套房产价格)两个核心字段,以下是几种实用的实现方式:

方法1:子查询计算全局总价(新手友好)

这种方式逻辑直观,先通过子查询算出所有房产的总价格,再用每个州的总价除以该值得到占比:

SELECT 
    state,
    SUM(price) AS state_total_price,
    -- 直接计算比例,如需百分比则乘以100并保留小数
    ROUND(SUM(price) / (SELECT SUM(price) FROM property_prices) * 100, 2) AS price_percentage
FROM property_prices
GROUP BY state;

方法2:窗口函数(高效简洁)

使用窗口函数SUM() OVER ()可以直接获取全局总和,无需单独子查询,性能更优:

SELECT 
    state,
    SUM(price) AS state_total_price,
    ROUND(
        SUM(price) / SUM(price) OVER () * 100,
        2
    ) AS price_percentage
FROM property_prices
GROUP BY state;

方法3:CTE公共表表达式(逻辑分层清晰)

先通过CTE计算每个州的总价,再基于这个结果计算占比,适合复杂场景的扩展:

WITH state_price_totals AS (
    SELECT 
        state,
        SUM(price) AS state_total
    FROM property_prices
    GROUP BY state
)
SELECT 
    state,
    state_total,
    ROUND(state_total / (SELECT SUM(state_total) FROM state_price_totals) * 100, 2) AS price_percentage
FROM state_price_totals;

注意事项

  • 如果存在总价为0的情况,需添加判断避免除以0错误:
    ROUND(
        CASE WHEN (SELECT SUM(price) FROM property_prices) = 0 
             THEN 0 
             ELSE SUM(price) / (SELECT SUM(price) FROM property_prices) * 100 
        END,
        2
    ) AS price_percentage
    
  • ROUND()函数的第二个参数是保留的小数位数,可根据需求调整(比如设为1或3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:37:12