Skip to content

Commit 6c23874

Browse files
authored
Merge pull request #44 from napakalas/issue-#42
Fix duplicate node_label aggregation by deduplicating before string_a…
2 parents dbb0ef4 + b400d94 commit 6c23874

1 file changed

Lines changed: 60 additions & 46 deletions

File tree

mapserver/competency/queries.d/query_27.yaml

Lines changed: 60 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -38,55 +38,69 @@ queries:
3838
),
3939
4040
sckan_labels AS (
41-
SELECT
42-
nm.sckan_id,
43-
nm.sckan_node_id,
44-
string_agg(pt.label, ', ' ORDER BY seq.pos) AS sckan_node_label
45-
FROM node_mappings nm
46-
JOIN path_node_features pnf
47-
ON nm.sckan_id = pnf.source_id
48-
AND nm.path_id = pnf.path_id
49-
AND nm.sckan_node_id = pnf.node_id
50-
JOIN feature_terms pt
51-
ON pnf.source_id = pt.source_id
52-
AND pnf.feature_id = pt.term_id
53-
CROSS JOIN LATERAL (
54-
SELECT pos
55-
FROM (
56-
SELECT pnf.node_id::jsonb->>0 AS value, 1 AS pos
57-
UNION ALL
58-
SELECT value, ordinality + 1 AS pos
59-
FROM jsonb_array_elements_text(pnf.node_id::jsonb->1) WITH ORDINALITY
60-
) s
61-
WHERE s.value = pt.term_id
62-
) AS seq
63-
GROUP BY nm.sckan_id, nm.sckan_node_id
41+
SELECT
42+
sckan_id,
43+
sckan_node_id,
44+
string_agg(label, ', ' ORDER BY pos) AS sckan_node_label
45+
FROM (
46+
SELECT DISTINCT
47+
nm.sckan_id,
48+
nm.sckan_node_id,
49+
pt.label,
50+
seq.pos
51+
FROM node_mappings nm
52+
JOIN path_node_features pnf
53+
ON nm.sckan_id = pnf.source_id
54+
AND nm.path_id = pnf.path_id
55+
AND nm.sckan_node_id = pnf.node_id
56+
JOIN feature_terms pt
57+
ON pnf.source_id = pt.source_id
58+
AND pnf.feature_id = pt.term_id
59+
CROSS JOIN LATERAL (
60+
SELECT pos
61+
FROM (
62+
SELECT pnf.node_id::jsonb->>0 AS value, 1 AS pos
63+
UNION ALL
64+
SELECT value, ordinality + 1 AS pos
65+
FROM jsonb_array_elements_text(pnf.node_id::jsonb->1) WITH ORDINALITY
66+
) s
67+
WHERE s.value = pt.term_id
68+
) seq
69+
) AS dedup
70+
GROUP BY sckan_id, sckan_node_id
6471
),
6572
6673
map_labels AS (
67-
SELECT
68-
nm.source_id,
69-
nm.node_id,
70-
string_agg(pt.label, ', ' ORDER BY seq.pos) AS node_label
71-
FROM node_mappings nm
72-
JOIN path_node_features pnf
73-
ON nm.source_id = pnf.source_id
74-
AND nm.path_id = pnf.path_id
75-
AND nm.node_id = pnf.node_id
76-
JOIN feature_terms pt
77-
ON pnf.source_id = pt.source_id
78-
AND pnf.feature_id = pt.term_id
79-
CROSS JOIN LATERAL (
80-
SELECT pos
81-
FROM (
82-
SELECT pnf.node_id::jsonb->>0 AS value, 1 AS pos
83-
UNION ALL
84-
SELECT value, ordinality + 1 AS pos
85-
FROM jsonb_array_elements_text(pnf.node_id::jsonb->1) WITH ORDINALITY
86-
) s
87-
WHERE s.value = pt.term_id
88-
) AS seq
89-
GROUP BY nm.source_id, nm.node_id
74+
SELECT
75+
source_id,
76+
node_id,
77+
string_agg(label, ', ' ORDER BY pos) AS node_label
78+
FROM (
79+
SELECT DISTINCT
80+
nm.source_id,
81+
nm.node_id,
82+
pt.label,
83+
seq.pos
84+
FROM node_mappings nm
85+
JOIN path_node_features pnf
86+
ON nm.source_id = pnf.source_id
87+
AND nm.path_id = pnf.path_id
88+
AND nm.node_id = pnf.node_id
89+
JOIN feature_terms pt
90+
ON pnf.source_id = pt.source_id
91+
AND pnf.feature_id = pt.term_id
92+
CROSS JOIN LATERAL (
93+
SELECT pos
94+
FROM (
95+
SELECT pnf.node_id::jsonb->>0 AS value, 1 AS pos
96+
UNION ALL
97+
SELECT value, ordinality + 1 AS pos
98+
FROM jsonb_array_elements_text(pnf.node_id::jsonb->1) WITH ORDINALITY
99+
) s
100+
WHERE s.value = pt.term_id
101+
) seq
102+
) AS dedup
103+
GROUP BY source_id, node_id
90104
)
91105
92106
SELECT

0 commit comments

Comments
 (0)