【问题标题】:Limit duplicated values in joined query to show only for first instance将连接查询中的重复值限制为仅显示第一个实例
【发布时间】:2021-10-25 21:13:27
【问题描述】:

我以查询返回的方式连接两个表:

parent.name child.name child.col
First A foo
Second A foo
Third A foo
Fourth B bar
Fifth C baz
Sixth C baz

我只需要child.col 字段中的数据首次出现即可。
我尝试过使用 windows 或按child.name 分组并合并除第一行之外的所有内容,但我想到的最简单的解决方案是像这样计算每个唯一子项的索引:

parent.name child.name child.col instance
First A foo 1
Second A foo 2
Third A foo 3
Fourth B bar 1
Fifth C baz 1
Sixth C baz 2

然后我可以使用 case 语句仅在 instance == 1 时显示 child.col 值。

我不知道如何实现这一点。我正在处理的真正查询是怪物,所以我必须展示的唯一代码是我为创建上述示例而编写的简单代码:

SELECT parent.name, child.name, child.col
FROM parent, child
WHERE parent.match = child.match

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    首先,学习使用正确、明确、标准、可读的JOIN语法。

    其次,你可以使用row_number()case

    SELECT p.name,
           (CASE WHEN ROW_NUMBER() OVER (PARTITION BY c.name ORDER BY p.name) = 1
                 THEN c.name
            END) as name,
           (CASE WHEN ROW_NUMBER() OVER (PARTITION BY c.name ORDER BY p.name) = 1
                 THEN c.col
            END) as col
    FROM parent p JOIN
         child c
         ON p.match = c.match
    ORDER BY c.name, p.name;
    

    请注意,需要外部聚合以确保每个组中的“第一”行具有值。

    【讨论】:

    • 1) 这是一个简单的例子,真正的查询使用大男孩连接,但感谢您让我知道。 2)谢谢,这比我预期的要容易得多?️
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多