SQL:如何选择组中同一行的两个字段?

标签 sql postgresql select greatest-n-per-group postgresql-9.6

我正在使用 Postgres 9.6。*

我有这个:

street | first_name | last_name
1st    | james      | bond
1st    | mr         | q 
1st    | ms         | m
2nd    | man        | with_golden_gun

我想获取不同地址的列表以及每个地址的第一组“first_name”和“last_name”。

我想要的输出:

street | first_name | last_name
1st    | james      | bond
2nd    | man        | with_golden_gun

我正在按 street 分组,并尝试使用 MIN(first_name)MIN(last_name) -- 然而 -- 使用 MIN 有每组独特街道的案例我可以获得看似随机的混合匹配first_namelast_name可能不在同一行.显然,MIN(最小值)在这里不是正确的聚合器函数。

我的问题:如何强制 first_namelast_name 来自同一行

最佳答案

您可以使用row_number 窗口函数来查询每组一行:

SELECT street, first_name, last_name
FROM   (SELECT street, first_name, last_name,
               ROW_NUMBER() OVER (PARTITION BY street ORDER BY first_name) AS rn
        FROM   mytable) t
WHERE  rn = 1

关于SQL:如何选择组中同一行的两个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716355/

相关文章:

python - 范围内每个数字的 SQL 计数总计(编辑 : via a UDF)

mysql - 当 table_b 中的 certain_field 为 null 时,在 table_a 左连接 table_b 中选择 *

javascript - 选择框被其他选择框的选项禁用或启用

mysql - 查找名称上行的平均值;显示所有行

php - Mysqli 查询没有返回任何结果

postgresql - 在 postgreSQL 中创建表

xml - Postgresql xml元素查询

php - 从 postgreSQL 到 Elasticsearch 索引大量数据(约 1200 万行)非常慢

sql - 如何将以下查询从 Oracle 转换为具有连接方式的 Postgres?

sql - Entity Framework (LINQ) 可以根据 JSON where 子句选择行吗?