gpt4 book ai didi

sql - EXISTS 内部 CASE 内部 AGGREGATE FUNCTION

转载 作者:行者123 更新时间:2023-12-04 23:43:27 28 4
gpt4 key购买 nike

我正在尝试做类似的事情:

SELECT SUM(
CASE WHEN (<some_condition>
AND EXISTS(SELECT 1
FROM <tableA> as tA
WHERE tA.Id = tB.tAId and
<some_other_condition>
)
) THEN 1 ELSE 0 END
) as <column_name>
FROM <tableB> as tB

我需要避免使用连接来实现我的需要,因为在这种情况下,我不想对通过连接子句获得的结果返回的重复项进行计数/求和。当我尝试执行查询时,收到以下错误消息:

"cannot perform an aggregate function on an expression containing an aggregate or a subquery"

我不知道我做错了什么。

感谢任何帮助。

EDIT: I added a possible condition on the WHERE statement only to show I need to relate the columns of the outside table (tableB) with the inside table (tableA)

这是一个 tableA 和 tableB 的示例,以及当我加入两者时会发生什么:

tableA:     tableB:          tableA JOIN tableB
Id Id tAId Time Id(A) Id(B) taId Time
1 1 1 5 1 1 1 5
2 2 2 6 2 2 2 6
3 3 2 10 2 3 2 10
4 4 3 11 3 4 3 11
5 5 4 14 4 5 4 14
6 4 13 4 6 4 13
7 4 12 4 7 4 12
8 5 10 5 8 5 10

因此,当我尝试使用 JOIN 操作的结果作为输入来对 tableA 中的某些属性(即 tableA.Id)进行计数/求和时,我最终会计算重复项。这就是为什么我不能使用 JOIN 除非我可以选择 DISTINCT 元素。我喜欢显示此内容的答案,因此我正在尝试无误地实现它。

(注意:我非常感谢所有其他答案,因为它们显示了适合我情况的可能解决方案)

最佳答案

SELECT SUM(
CASE WHEN (<some_condition>
AND tA.Id IS NOT NULL
) THEN 1 ELSE 0 END
) as <column_name>
FROM <tableB> as tB
JOIN (SELECT DISTINCT ta.Id
FROM <tableA>) as tA ON tA.Id = tB.Id AND <some_other_condition>

关于sql - EXISTS 内部 CASE 内部 AGGREGATE FUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600786/

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