[英]athena concatenate multiple columns into one json string
我的要求:
我有一个名为students
的表,具有此模式
-----------------------
| id name age city |
-----------------------
| 1 a 12 city1 |
| 2 b 13 city2 |
| 3 c 14 city3 |
| 4 d 15 city4 |
----------------------
我想要一个返回以下结果的查询
---------------------------------------
id details
---------------------------------------
1 {name: a , age: 12 , city:city1}
2 {name: b , age: 13 , city:city2}
3 {name: c , age: 14 , city:city3}
4 {name: d ,age: 15 , city:city4}
---------------------------------------
我尝试了以下查询
select id,(name,age,city) as details from students
并收到了这个 output
---------------------------------------
id details
---------------------------------------
1 {field0: a , field1: 12 , field2:city1}
2 {field0: b , field1: 13 , field2:city2}
3 {field0: c , field1: 14 , field2:city3}
4 {field0: d ,field1: 15 , field2:city4}
---------------------------------------
谁能告诉我如何摆脱这个field0,field1,field1,
而是使用实际的列名?
首先,这些并不完全是我在 Postgres 中得到的结果。 其次,您似乎想要返回 JSON object。 所以一种方法是:
select id, json_object( array['name', 'age', 'city'], array[name, age::text, city])
from students;
这是一个 db<>fiddle。
由于您没有指定数据库引擎并且为 Amazon Athena 添加了标签,因此 Athena 的语法如下:
WITH students AS
( SELECT 1 as id, 'a' as name, 12 as age, 'city1' as city UNION ALL
SELECT 2, 'b', 13, 'city2' UNION ALL
SELECT 3, 'c', 14, 'city3' UNION ALL
SELECT 4, 'd', 15, 'city4')
SELECT CAST(MAP_FROM_ENTRIES(
ARRAY[
('name', name),
('age', cast(age as varchar)),
('city', city)
]) AS JSON) as details
FROM students
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.