sql - 查找具有相同值的行 PostgreSQL

标签 sql database postgresql

在一个表中,有多个值的id

id|value
--|------
1 |a
1 |b
2 |a
2 |b
3 |a
3 |c
4 |a
5 |a
5 |b
...

那么我如何才能选择所有具有相同值的 id 1? 我想要的应该是这样的

id
--
1
2
5

最佳答案

如果您想要完全相同的值,您可以使用基于集合的方法:

select t.id
from t join
     t t1
     on t.value = t1.value and t1.id = 1
group by t.id
having count(*) = (select count(*) from t where t.id = 1);

假设没有重复项,这会计算与每个 id 匹配的值的数量,然后检查是否存在相同的数字。

我应该承认 string_agg() 方法也很优雅:

select id
from (select id, string_agg(value, ',' order by value) as values,
             max(case when id = 1 then string_agg(value, ',' order by value)) over () as values_1
      from t
      group by id
     ) t
where values = values_1;

关于sql - 查找具有相同值的行 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105695/

相关文章:

sql - 在 postgresql 表中存储带有引号或反斜杠等特殊字符的字符串

java - 无法找到数据库位置

mysql - 我对案例的 SUM 似乎重复了两次

sql - SQL PIVOT可以做这样的转换吗?

sql - 我如何获得价格的中位数?

sql - 在 SQL Server 2008 中使用嵌套 CASE 语句

database - 超出限制 最大连接数 Postgres

python - 如何重新初始化sqlite3中SELECT查询结果集中的行索引计数?

sql - postgresql 安装后出错 : connection to server failed

database - oracle中的类型同义词