gpt4 book ai didi

SQL有没有办法选择相同列不相似的行

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:44 24 4
gpt4 key购买 nike

SQL 有办法根据相同的列选择不相似的行。

我有这张表 City_Names 数据库名称 DataPostalCode

id |AR        |HB        |ENG
---+----------+----------+-----------
1 |valueAR |valueHB |valueENG
---+----------+----------+-----------
2 |TamraAR |TamraHB |TamraENG
---+----------+----------+-----------
3 |TamraAR |Tamra2HB |TamraENG
---+----------+----------+-----------
4 |KabulAR |KabulHB |KabulENG
---+----------+----------+-----------
6 |KabulAR |KabulHB |KabulENG
---+----------+----------+-----------
7 |KabulAR |KabulHB |KabulENG
---+----------+----------+-----------
8 |Azor |Azor |Azor
---+----------+----------+-----------
9 |Azor |Azor |Azor
---+----------+----------+-----------
...

以上数据只是演示,并非真实数据。

通过 AR+HB+ENG 查看 id 4 行、6 行和 7 行具有相似的值。

id 行第 8 行和第 9 行相同。

但是 id 1 行是单个的。

还有行 id 2 和 3(我正在寻找的)与 AR+ENG 相似,但 HB 列不相似。

所以我正在训练编写 sql 代码来选择那些不相似的行,结果应该是这样。

id |AR        |HB        |ENG
---+----------+----------+-----------
2 |TamraAR |TamraHB |TamraENG
---+----------+----------+-----------
3 |TamraAR |Tamra2HB |TamraENG
---+----------+----------+-----------

我应该写什么?

SELECT id,AR,HB,ENG FROM  City_Names ....;

最佳答案

您可以为此使用 exists:

select cn.*
from city_names cn
where exists (select 1
from city_names cn2
where cn2.ar = cn.ar and
cn2.eng = cn.eng and
cn2.hb <> cn.hb
);

如果您愿意,您也可以将其缩减为一行。确切的语法取决于数据库:

select cn.ar, cn.eng,
list_agg(cn.id, ',') over (order by id) as ids,
list_agg(cn.hb, ',') over (order by id) as hbs
from city_names cn
group by cn.ar, cn.eng
having min(cn.hb) <> max(cn.hb);

聚合字符串的具体函数取决于数据库。

关于SQL有没有办法选择相同列不相似的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com