gpt4 book ai didi

sql - 如果基于 SQL 中的给定优先级存在数据,则返回行

转载 作者:行者123 更新时间:2023-11-29 12:11:38 24 4
gpt4 key购买 nike

我正在尝试形成一个 PostgreSQL 语句,该语句根据具有给定优先级的电子邮件类型返回客户电子邮件。下面我有一张客户 1 和客户 2 的表格。客户 1 有个人和公司的电子邮件,而客户 2 有公司的。

我要解决的问题是,如果存在,首先返回客户的个人电子邮件,如果不存在,则返回公司。因此,个人电子邮件优先于公司。这在 PostgreSQL 中甚至可能吗?

 customers
+------------+
| cusomterID |
+------------+
| 1 |
| 2 |
+------------+

customer_email
+------------+-------------+
| cusomterID | email_type |
+------------+-------------+
| 1 | personal | -- 0
| 2 | company | -- 1
| 1 | company | -- 1
+------------+-------------+

我现在尝试的方法并没有真正起作用。它返回所有行并且不过滤

SELECT *
FROM customers cs
JOIN cumstomer_email cm ON cm.customerId = cs.customreId
WHERE COALESCE(cm.email_type,0) IN (0,1)

最佳答案

一种选择是使用条件聚合:

select customerId, max(case when email_type = 'personal' then email_type
else email_type
end) email_type
from customer_email
group by customerId

这是使用 row_number() 的另一个选项:

select customerId, email_type
from (select *,
row_number() over (partition by customerId
order by email_type = 'personal' desc) rn
from customer_email) t
where rn = 1

关于sql - 如果基于 SQL 中的给定优先级存在数据,则返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518186/

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