在 Oracle 中使用 Listagg 从列中选择 min(value) 和 max(value) 并将其返回到单行中
Selecting min(value) and max(value) from a column and returning it in a single row Using Listagg in Oracle
我有一个 table 如下所示
gen_id pos_id Language Value
1221 1234 EN 1.0 m
1221 1234 EN 2.0 m
1221 1234 EN 3.0 m
1221 1234 EN 4.9 m
我想 select 值为:“1.0 m - 4.9 m”。
Select min(value) 和 max(value) 由字符串“-”分隔。
我尝试了下面的 listagg 但它抛出了错误
"ORA-00937: 不是单组函数
00937. 00000 - “不是单组函数”。
Select LISTAGG (min(value) || '-' || max(value))
WITHIN GROUP (ORDER BY pos_id)
OVER (PARTITION BY geng_id,pos_id,language)
From TSS_Gen where geng_id = 1221 and Pos_id = 1234;
首先,不要将数字存储为带单位的字符串;将它们存储为数字。
假设数值然后你不需要使用LISTAGG
(或分析函数)并且可以简单地聚合和使用字符串连接:
SELECT min(value) || ' m - ' || max(value) || ' m'
FROM TSS_Gen
WHERE geng_id = 1221
AND Pos_id = 1234;
如果您要存储单位然后假设它们都是米那么:
SELECT min(TO_NUMBER(SUBSTR(value, 1, LENGTH(value) - 2))) || ' m'
|| ' - '
|| max(TO_NUMBER(SUBSTR(value, 1, LENGTH(value) - 2))) || ' m'
FROM TSS_Gen
WHERE geng_id = 1221
AND Pos_id = 1234;
我有一个 table 如下所示
gen_id pos_id Language Value
1221 1234 EN 1.0 m
1221 1234 EN 2.0 m
1221 1234 EN 3.0 m
1221 1234 EN 4.9 m
我想 select 值为:“1.0 m - 4.9 m”。
Select min(value) 和 max(value) 由字符串“-”分隔。
我尝试了下面的 listagg 但它抛出了错误 "ORA-00937: 不是单组函数 00937. 00000 - “不是单组函数”。
Select LISTAGG (min(value) || '-' || max(value))
WITHIN GROUP (ORDER BY pos_id)
OVER (PARTITION BY geng_id,pos_id,language)
From TSS_Gen where geng_id = 1221 and Pos_id = 1234;
首先,不要将数字存储为带单位的字符串;将它们存储为数字。
假设数值然后你不需要使用LISTAGG
(或分析函数)并且可以简单地聚合和使用字符串连接:
SELECT min(value) || ' m - ' || max(value) || ' m'
FROM TSS_Gen
WHERE geng_id = 1221
AND Pos_id = 1234;
如果您要存储单位然后假设它们都是米那么:
SELECT min(TO_NUMBER(SUBSTR(value, 1, LENGTH(value) - 2))) || ' m'
|| ' - '
|| max(TO_NUMBER(SUBSTR(value, 1, LENGTH(value) - 2))) || ' m'
FROM TSS_Gen
WHERE geng_id = 1221
AND Pos_id = 1234;