item_no parent item_no_child item_name text
123 3 xxx the item is resistant to water
123 5 yyy The item is resistant to heat
123 6 zzz The item is ....
我将把父item_no作为输入并检索子项目no。现在我必须检查每个子项的文本,如果它们有相同的文本,我不应该显示item_name否则我应该。
答案 0 :(得分:1)
row_number()
分析函数是实现此类不同查询的一种巧妙方式:
SELECT item_name
FROM (SELECT item_name,
ROW_NUMBER() OVER (PARTITION BY text ORDER BY 1) AS rn
FROM items
WHERE item_no parent = 123)
WHERE rn = 1
编辑:
根据评论中的要求进行一些解释 - row_number
是一个分析函数(有时也称为窗口函数)。它返回每行输入一个结果(如行函数),但也考虑所有其他行(如聚合函数)。在这种情况下,row_number
只返回当前行的数量(即简单计数器)。此计数是根据text
(partition by
子句)的不同值完成的。 row_number
需要一个order by
子句,因此它知道计算这些行的顺序。由于此处我们不关心哪一行(text
的每个不同值)首先出现,我只是按常量1
排序。