我在sql方面遇到了困难。我没有帐号和计划。我想知道所有没有参加某个计划的人。
acct plans 1 planA 1 planB 2 planA 3 planC 4 planD
我需要的人谁没有登记在计划。我当前的查询是:
select * from table where plans <> 'planA'
但我也得到了科目1,因为这一行有计划B。我只需要帐户3,4作为输出。
ivqmmu1c1#
只是另一个可能的查询,它构建了计划列表,成员被订阅并检查计划是否不在该列表中-
with temptable as ( select acct,collect_list(plans) as plan_list from plantable group by acct ) select * from temptable where array_contains(plan_list,'planA') = false;
tez616oj2#
尝试
select * from accplans a where a.acct not in (select a2.acct from accplans a2 where a2.plans = 'planA')
7rtdyuoh3#
显而易见的解决方案是使用自连接。连接是代价高昂的操作。你可以尝试另一种方法。
SELECT acct, SUM(CASE WHEN plans='planA' THEN 1 ELSE 0 END) AS hasPlanA FROM tbl GROUP BY acct HAVING hasPlanA = 0
通过上面的陈述,您实际上是在计算一个客户订阅plana的次数。这个 HAVING 子句只过滤plana订阅为零的结果。
HAVING
3条答案
按热度按时间ivqmmu1c1#
只是另一个可能的查询,它构建了计划列表,成员被订阅并检查计划是否不在该列表中-
tez616oj2#
尝试
7rtdyuoh3#
显而易见的解决方案是使用自连接。连接是代价高昂的操作。你可以尝试另一种方法。
通过上面的陈述,您实际上是在计算一个客户订阅plana的次数。这个
HAVING
子句只过滤plana订阅为零的结果。