如果存在多个SQL,则SQL计数一行

问题描述 投票:0回答:2

我认为这是一个非常标准的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
postgresql relational-database
2个回答
1
投票

你可以使用GROUP BYHAVING获得纬度/经度对:

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;

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

© www.soinside.com 2019 - 2024. All rights reserved.