sql - PostgreSQL。如果某列中的值出现两次或更多次,则排除行
问题描述
有一个“代码”表:
+---------+---------+
| numbers | letters |
+=========+=========+
| 1 | a |
+---------+---------+
| 2 | b |
+---------+---------+
| 3 | a |
+---------+---------+
| 4 | c |
+---------+---------+
| 5 | a |
+---------+---------+
| 6 | b |
+---------+---------+
“数字”列中的值是唯一的(如“id”)。
如果“字母”值出现两次或更多次,则需要排除行。
结果应如下所示:
+---------+---------+
| numbers | letters |
+=========+=========+
| 4 | c |
+---------+---------+
我怎样才能得到那个查询?
解决方案
我会使用:
select min(number), letter
from codes
group by letter
having count(*) = 1;
如果保证数字是唯一的,那么not exists
可能是最快的解决方案:
select c.*
from codes c
where not exists (select 1
from codes c2
where c2.letter = c.letter and c2.number <> c.number
);
推荐阅读
- javascript - 如何使用 dayjs 将日期时间从一个时区转换为另一个时区
- node.js - nodejs运行单线程还是多线程?
- gitlab - Gitlab:通过提交自动关闭问题不起作用
- python - 用于数据处理的 Python 类设计
- python - pytorch 模块中已初始化的类成员
- python - 如何将 xy 数据块拆分为 isalpha() 和换行符 \n 之间的列表
- spring-boot - 无法连接到 MQ Spring Boot SSL
- bash - 在 bash 脚本中循环遍历 JSON 文件
- python-3.x - 将值附加到 reactjs 中的现有 url
- java - 以编程方式在约束布局中创建多个动态 CardView?