微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择 ID 在列表中的行并满足其他 2 个要求,可能是 Teradata SQL 中的子查询?

如何解决选择 ID 在列表中的行并满足其他 2 个要求,可能是 Teradata SQL 中的子查询?

我在 teradata sql 中有如下表:

ID   | col1 | col2
-------------------
111  | A  | 54
222  | B  | 8
333  | C  | 17
444  | B  | 44
555  | A  | 1

我有客户 ID 列表:

myList = ['111','222','333']

并且我需要从表中选择 myList 中满足要求的客户 ID:

  1. 在 col1 中的值为“A”或“B”
  2. 在 col2 中的值大于 10 (>10)

因此,我需要如下所示:

ID   | col1 | col2
--------------------
111  | A    | 54

因为 ID = 111 并且在 myList 上,col1 是“A”或“B”并且 col2 中的值大于 10。

我如何在 teradata sql 中做到这一点?可能在子查询中?

解决方法

不需要子查询。
所有条件都可以与简单 AND 语句的 WHERE 子句中的 SELECT 运算符组合:

SELECT * 
FROM tablename
WHERE ID IN ('111','222','333')
  AND col1 IN ('A','B')
  AND col2 > 10
,

我们可以在这里尝试聚合方法:

SELECT *
FROM yourTable
WHERE ID IN ('111','333') AND
      ID IN (SELECT ID
             FROM yourTable
             GROUP BY ID
             HAVING COUNT(CASE WHEN col1 NOT IN ('A','B') THEN 1 END) = 0 AND
                    COUNT(CASE WHEN col2 > 10 THEN 1 END) > 0);

WHERE 子句将 ID 值限制为您的客户列表。 HAVING 子句中的两个条件检查对另外两列的限制。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。