繁体   English   中英

雅典娜将多列连接成一个 json 字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM