如何在MySQL中计算两居室与三居室公寓每平价格的百分比差异
2居室与3居室公寓每平方米价格百分比差异SQL实现方案
你可以通过条件聚合一次性取出两类房型的平均单价,再套入公式计算,无需执行两次单独查询,实现逻辑如下:
可直接运行的SQL语句
SELECT ((avg_2room - avg_3room) / ((avg_2room + avg_3room) / 2)) * 100 AS price_diff_percent FROM ( SELECT -- 分别聚合2居室、3居室的平均每平价格 AVG(CASE WHEN NoPP = 2 THEN ValeurFonciere / SurCar1 END) AS avg_2room, AVG(CASE WHEN NoPP = 3 THEN ValeurFonciere / SurCar1 END) AS avg_3room FROM mutation -- 替换原隐式连接为显式内连接,逻辑更清晰 INNER JOIN bien ON mutation.Bien_ID = bien.Bien_ID WHERE TypeLoc = 'Appartement' AND NoPP IN (2,3) -- 提前过滤仅保留需要的房型,提升查询效率 AND SurCar1 > 0 -- 避免建筑面积为0导致的除以0错误 ) AS room_price_avg;
逻辑说明
- 内层子查询使用
CASE WHEN做条件聚合,分别统计符合要求的2居室平均单价(对应公式中的A)和3居室平均单价(对应公式中的B) - 外层查询直接套用你给出的百分比差异公式,返回的
price_diff_percent字段就是最终的百分比差值
内容的提问来源于stack exchange,提问作者casper
相关产品推荐
相关产品推荐

