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

SQL Server如何筛选所有关联所有者满足最低现金余额的房产ID

在SQL Server中筛选所有所有者现金达标的房产ID

需求回顾

我们有一张包含property_id(房产ID)、owner_id(所有者ID)、owner_cash(所有者现金余额)的表,需要返回所有关联所有者的现金余额均满足最低要求的房产ID——只要该房产有任意一位所有者现金未达标,就排除该房产。

示例数据:

房产ID(property_id)所有者ID(owner_id)所有者现金余额(owner_cash)
101584200000
10288210000
10288386500
102884140000
103910268000
103911300000

当最低现金要求为50000时,预期结果:

房产ID(property_id)
101
103

(房产102因所有者882的现金余额不足被排除)

最优实现方案

SQL是基于集合操作的语言,递归CTE和WHILE循环并非最优选择——这类逐行处理的方式代码复杂且性能低下。以下两种方案是更高效、简洁的实现:

方案一:分组聚合筛选最小值达标

利用分组后取每个房产的最小现金余额,若最小值满足要求,则该房产所有所有者的现金都达标:

-- 设置最低现金要求
DECLARE @MinCash INT = 50000;

SELECT property_id
FROM YourTableName -- 替换为你的表名
GROUP BY property_id
HAVING MIN(owner_cash) >= @MinCash;

逻辑说明:每个房产的MIN(owner_cash)是该房产所有者的最低现金余额,只要这个最小值大于等于要求值,就意味着所有所有者的现金都达标。此方案逻辑直观,聚合操作的性能优异,适合大数据量场景。

方案二:排除存在不达标所有者的房产(NOT EXISTS)

通过子查询找出所有存在至少一位现金不达标的房产,再在主查询中排除这些房产:

DECLARE @MinCash INT = 50000;

SELECT DISTINCT property_id
FROM YourTableName t1
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTableName t2
    WHERE t2.property_id = t1.property_id
      AND t2.owner_cash < @MinCash
);

逻辑说明:子查询会定位到所有包含现金不足所有者的房产ID,NOT EXISTS则将这些房产从结果中排除。如果property_id和owner_cash有索引,SQL Server的查询优化器会生成高效的执行计划,性能同样出色。

方案对比

两种方案都能高效实现需求:

  • 方案一更简洁,代码量少,聚合操作在数据量较大时通常有更好的性能;
  • 方案二的逻辑更贴近"排除不合格项"的直观思路,适合需要扩展条件的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:45:44