mysql - 如何使用 MySQL 在表中显示唯一记录
问题描述
我正在尝试显示表中的所有唯一记录。
SQL 脚本:
CREATE TABLE certificate(
id INT PRIMARY KEY,
full_name VARCHAR(200),
address VARCHAR(200),
date_of_birth DATETIME,
special_code INT,
validity VARCHAR(200)
);
INSERT INTO certificate VALUES('1','Walter White','Albuquerque 87107','1970-10-10','1000','VALID');
INSERT INTO certificate VALUES('2','Skyler White','Albuquerque 87107','1978-10-10','1001','VALID');
INSERT INTO certificate VALUES('3','Jesse Pinkman','Santa Fé 28','1979-10-10','1002','INVALID');
INSERT INTO certificate VALUES('4','Hank Schrader','El Paso 17','1980-10-10','1003','VALID');
INSERT INTO certificate VALUES('5','Hank Schrader','El Paso 17','1980-01-10','1004','VALID');
INSERT INTO certificate VALUES('6','Walter White','Albuquerque 87107','1970-10-10','1005','VALID');
INSERT INTO certificate VALUES('7','Saul Goodman','El Paso 14','1973-10-10','1006','VALID');
INSERT INTO certificate VALUES('8','Gustavo Fring','Santa Fé 190','1964-10-11','1007','INVALID');
INSERT INTO certificate VALUES('9','Walter White','Albuquerque 87107','1978-01-08','1008','VALID');
INSERT INTO certificate VALUES('10','Hank Schrader','El Paso 17','1980-10-10','1009','VALID');
INSERT INTO certificate VALUES('11','Walter White','Albuquerque 87107','1978-01-08','1010','VALID');
INSERT INTO certificate VALUES('12','Hank Schrader','El Paso 98','1980-10-10','10011','VALID');
INSERT INTO certificate VALUES('13','Hank Schrader','El Paso 98','1980-10-10','10012','VALID');
查询:
具有有效证书的特殊代码条目数
select full_name, count(*) from certificate where validity = 'VALID' group by full_name;
所有持有有效证件的人
select * from certificate where validity = 'VALID' order by full_name;
有两个人同名,但他们住在不同的地址,所以我们可以假设这不是同一个人,第一次选择的结果是“不正确”
select * from certificate where validity = 'VALID' and full_name = 'Hank Schrader';
在这个选择中,有三个记录属于两个人的父亲和儿子。他们都住在同一个地址,但没有相同的出生日期第一次选择的结果太“不正确”
select * from certificate where validity = 'VALID' and full_name = 'Walter White';
所以我需要什么:
- 如果名称相同,则将地址与表中具有相同名称的其他条目进行检查。
- 如果地址相同,我将与表中具有相同名称的其他条目检查出生日期。
- 如果是这种情况,那就是同一个人,如果不是,那就是不同的人,只有
然后我可以添加记录。
最终,我需要一个具有有效证书且在表中有多个条目的所有唯一人员的列表(ID 为 11 的 Walter White 与 ID 为 8 的 Walter White 不代表同一个人)
所以结果将是:
full_name | ids
----------------------
Walter White | 1,6
Walter White | 9,11
Hank Schrader | 4,5,10
Hank Schrader | 12,13
解决方案
您可以在下面尝试 - 使用 group byfull_name,address,date_of_birth
select full_name,
count(id) from certificate where validity = 'VALID'
group by full_name,address,date_of_birth having count(id)>1
推荐阅读
- javascript - 如何使用 Mapbox GL JS 和对象制作等值线地图?
- python - 如何从 gitlab CI 工件文件夹发布覆盖率报告?
- reactjs - 材质 UI 样式化组件如何应用样式
- r - 合并来自同一列的各种 DataFrame
- python - 如何修复 LaTeX Standalone.cls 在 Heroku 上找不到问题?
- ruby - AWS Lambda 链接不适用于 RDS Postgres
- javascript - javascript 变量在传递给函数时显示为 NaN
- keyboard-events - Apache Royale:如何检测 j:textInput 上的输入键
- kotlin - IntelliJ Kotlin 变量建议
- javascript - http.send 在后端返回 [object object] (Node + Express)