sql - 当一列包含至少一个匹配项时返回一个值

标签 sql postgresql postgresql-8.3

编辑:很抱歉在此之前不提及这是在 postgres 8.3 实现上。

我有一个四列的表,是今天建的表。

Source_IP, Destination_IP, user_type, ut_bool

user_type 列不断获取新条目,因此我想将它与历史条目表进行比较,看看它是否是当天的新条目。 source_ip, destination_Ip可以认为是主键

10.1.1.2, 30.30.30.1, type1, 0
10.1.1.2, 30.30.30.1, type4, 1
10.1.1.2, 30.30.30.4, type5, 0
10.1.1.2, 30.30.30.4, type3, 0
10.1.1.2, 30.30.50.9, type2, 0
10.1.1.4, 30.30.30.4, type4, 0
10.1.1.4, 30.30.30.4, type3, 1

如果至少有一个 source_ip,destination_ip, user_type 对具有1 在它旁边,例如我想得到

10.1.1.2, 30.30.30.1, 1
10.1.1.2, 30.30.30.4, 0
10.1.1.4, 30.30.30.4, 1

我不确定如何正确使用 exists 语句。

如何修复以下查询?

select source_ip, destination_ip,
(
select
case when exists 
(select true from table
where ut_bool =1)
then '1'
else '0' end
) as ut_new
from
table;

我的查询不断返回,因为我没有正确使用 exists 语句:

10.1.1.2, 30.30.30.1, 0
10.1.1.2, 30.30.30.4, 0
10.1.1.4, 30.30.30.4, 0

最佳答案

我建议修改您的 SQL 语句:

SELECT SOURCE_IP,
  DESTINATION_IP,
  CASE SUM(UT_BOOL)
    WHEN 0
    THEN 0
    ELSE 1
  END AS UT_NEW
FROM test_table_name
GROUP BY SOURCE_IP,
  DESTINATION_IP;

在您的测试数据返回时执行:

10.1.1.2    30.30.50.9  0
10.1.1.2    30.30.30.1  1
10.1.1.2    30.30.30.4  0
10.1.1.4    30.30.30.4  1

测试并在 Oracle 和 Postgres 上工作

关于sql - 当一列包含至少一个匹配项时返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718797/

相关文章:

java - 当我向变量分配函数时,如何让变量自行更新

mysql - 查询多天间隔表,按天分组计数?

c# - 我该怎么做才能停止出现连接池错误

postgresql - Sequelize : Query with order by a field in JSONB object

postgresql - 在非常大的表上运行 AUTO_VACUUM(以防止环绕)时出现问题

sql - 在 PostgreSQL 中编写一个仅在工作日选择数据的函数

sql - 根据这些行之间的条件过滤 Postgres 中的重复行

php - "Unable to connect to PostgreSQL server"与本地主机上的 pg_connect

performance - 使用输入变量时 Postgres 的运行速度要慢得多

SQL查询连接问题