我认为这是一个非常标准的Postgres SQL问题。我可以解释一下,就是不能编程。
我有4行具有唯一帐户ID。这些行中的每一行共享相同的经度和纬度值,但它们的物理地址不同(公寓1A,公寓2B .....)。每个帐户都处于活动或非活动状态。每个帐户获得或不获得HBO。
此数据全部来自单个表。我的情况是这样的: 按纬度,经度和自治市镇的名称进行分组,循环数据并计算每个帐户处于非活动状态的一行,并且至少有一个帐户仍然获得HBO。
因此,如果同一个lng / lat有4个帐户,3个处于非活动状态,但1个仍处于活动状态,则记录跳过。
如果同一个lng / lat有4个账号,4个无效,没有HBO,记录跳过。
如果同一个lng / lat有4个账户,4个无效,一个仍然获得HBO,记录计算。
更新: 我需要这个作为城镇的计数。我只是使用lat / lng来确认逻辑是否正确而且确实如此。我正在寻找的最终结果是:
Borough | Count
---------------------
Bronx 50
Queens 12
答案 0 :(得分:1)
您可以使用GROUP BY
和HAVING
:
SELECT ml."LATITUDE", ml."LONGITUDE"
FROM "MasterListMN" ml
GROUP BY ml."LATITUDE", ml."LONGITUDE"
HAVING SUM( ("account_part_1" = 'INACT' AND "account_part_2" = 'INACT')::int) = COUNT(*) AND
SUM( (ml."GETS_HBO" = 'TRUE')::int) > 0;
答案 1 :(得分:0)
根据我的理解,您希望过滤非活动计数= 4的行和活动的hbo帐户计数> 0.我分别计算非活动和hbo帐户的数量,并相应地过滤行。与戈登的解决方案类似。
SELECT lat, lon
FROM test
GROUP BY 1, 2
HAVING COUNT(CASE WHEN IS_active THEN 1 END) = 0
AND COUNT(CASE WHEN has_hbo THEN 1 END) > 0;
在此之后,您可以按行政区划分并计算。这是SQL Fiddle。