gpt4 book ai didi

mysql - SQL查询使用查询同一个表的子查询来过滤行

转载 作者:行者123 更新时间:2023-11-29 04:37:44 29 4
gpt4 key购买 nike

我正在尝试构建一个查询,该查询根据其他行过滤行,如下例所示

TableA

Id status type date
300 approved ACTIVE 11/12/2015 10:00:00
300 approved ACTIVE 11/12/2015 10:10:00
300 approved INACTIVE 11/12/2015 11:00:00
200 approved ACTIVE 11/12/2015 11:10:00
200 approved INACTIVE 11/12/2015 11:10:00
100 approved ACTIVE 11/12/2015 11:10:00

从上表中,我试图返回具有相同数量的 ACTIVE 和 INACTIVE 类型的 ID,例如 Id 300 有两行类型为 ACTIVE 和一行类型为 INACTIVE,因此 Id 300 应该从我的结果中排除,其中 200有 1 个活跃的和 1 个不活跃的,它应该包含在结果中

在上面的表格状态中,类型也可以有其他值,但我只关心上面列出的忽略其他值

因此,对于 TableA,查询的最终结果将是

Id
200

我尝试运行以下查询,但没有给我预期的结果

SELECT Id
FROM TableA oa
WHERE oa.type in('ACTIVE','INACTIVE')
and oa.status='APPROVED'
and not EXISTS(SELECT
x.id
,COUNT(*)
FROM (SELECT DISTINCT
id
,c.type
FROM TableA c
WHERE
AND c.type IN ('ACTIVE','INACTIVE')
AND c.status = 'APPROVED'
AND c.Id= ta.Id
)x
GROUP BY x.Id
HAVING COUNT(*) = 1)

是否可以更正上述查询以获得所需的结果?

最佳答案

您只需要使用SUMHAVING:

SELECT Id
FROM TableA
WHERE
status = 'approved'
AND type In ('ACTIVE', 'INACTIVE')
GROUP BY Id
HAVING
SUM(CASE WHEN type = 'ACTIVE' THEN 1 ELSE 0 END) =
SUM(CASE WHEN type = 'INACTIVE' THEN 1 ELSE 0 END)

关于mysql - SQL查询使用查询同一个表的子查询来过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37152509/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com