我有一个postgresql表,包含一个电子邮件地址列表,该表有三列,Email,EmailServer(例如,gmail.com,outlook.commsn.com,和yahoo.com.ca等),和Valid(布尔值)。
现在,我想按EmailServer对这些电子邮件进行分组,然后将每个大组(计数〉=6)的前3条记录更新为Valid = true,而将每个组的其余记录保留为Valid = false。
我无法通过以下查询获得所需的输出:
UPDATE public."EmailContacts"
SET "Valid"=true
WHERE "EmailServer" IN (
SELECT "EmailServer"
FROM public."EmailContacts"
GROUP by "EmailServer"
HAVING count(*) >=6
LIMIT 5)
请帮助修改,以便得到预期的效果。将非常感谢您的任何帮助!
2条答案
按热度按时间o4hqfura1#
major_servers
查找存在5个以上电子邮件服务器的主要组。enumerated_emails
使用窗口函数row_number()
按照邮件的自然顺序(* 请参见TODO注解,我认为您应该选择另一个ORDER BY条件 *)枚举属于主要组的邮件。在此处查找sql-fiddle。
9gm1akwq2#
你需要获得服务器,然后排序邮件从哪个,然后执行更新。