在从表中检索多列的查询中,可能需要根据特定列,同时保留其他列中的不同值。这可能具有挑战性,因为 DISTINCT 和 GROUP BY 等传统子句对整行进行操作。
为了满足这一需求,可以使用 ROW_NUMBER() 函数。此函数为指定列定义的分区内的每一行分配一个唯一的序列号。通过将 ROW_NUMBER() 与 PARTITION BY 和 ORDER BY 子句相结合,您可以根据所需列中的值创建每个分区内的行排名。
考虑以下查询:
SELECT ID, Email, ProductName, ProductModel FROM Products
要修改此查询以使其仅返回唯一的电子邮件,我们可以使用以下命令代码:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) AS rn FROM Products ) AS a WHERE rn = 1
ROW_NUMBER() 函数根据电子邮件列将结果划分为多个分区,并为每一行在其分区内分配唯一的排名。随后的 ORDER BY 子句确保每个分区中最后出现的行排在第一位。最后的 WHERE 子句过滤结果,仅包含排名为 1 的行,有效消除重复的电子邮件。
这种方法允许您指定任何列作为分区和排名的基础,为定制查询提供了灵活性根据您的具体要求。
以上是如何消除 SQL SELECT 语句中的重复电子邮件,同时保留其他列数据?的详细内容。更多信息请关注PHP中文网其他相关文章!