ich wirklich etwas Hilfe hier vor meinem Kopf explodiert verwenden könnte ... Da die folgende Datenstruktur:Postgres Bauen Complex JSON-Objekt von Wide Spalte wie Design Schlüssel Wert
SELECT * FROM (VALUES (1, 1, 1, 1), (2, 2, 2, 2)) AS t(day, apple, banana, orange);
day | apple | banana | orange
-----+-------+--------+--------
1 | 1 | 1 | 1
2 | 2 | 2 | 2
Ich möchte ein JSON
konstruieren Objekt, das wie folgt aussieht:
{
"data": [
{
"day": 1,
"fruits": [
{
"key": "apple",
"value": 1
},
{
"key": "banana",
"value": 1
},
{
"key": "orange",
"value": 1
}
]
}
]
}
Vielleicht bin ich nicht so weit weg von meinem Ziel:
SELECT json_build_object(
'data', json_agg(
json_build_object(
'day', t.day,
'fruits', t)
)
) FROM (VALUES (1, 1, 1, 1), (2, 2, 2, 2)) AS t(day, apple, banana, orange);
Ergebnisse in:
{
"data": [
{
"day": 1,
"fruits": {
"day": 1,
"apple": 1,
"banana": 1,
"orange": 1
}
}
]
}
Ich weiß, dass es json_each
ist, die den Trick tun kann. Aber ich habe Mühe, es auf die Abfrage anzuwenden.
bearbeiten: Dies ist meine aktualisierte Abfrage, die, glaube ich, ist ziemlich nahe. Ich habe den Gedanken fallen gelassen, es mit json_each
zu lösen. Jetzt habe ich nur ein Array von fruits
statt Anhängen an das fruits
Objekt zurückgeben:
SELECT json_build_object(
'data', json_agg(
json_build_object(
'day', t.day,
'fruits', json_build_object(
'key', 'apple',
'value', t.apple,
'key', 'banana',
'value', t.banana,
'key', 'orange',
'value', t.orange
)
)
)
) FROM (VALUES (1, 1, 1, 1), (2, 2, 2, 2)) AS t(day, apple, banana, orange);
Würde ich brauche eine Unterabfrage hinzufügen, um eine verschachtelte Aggregatfunktion zu verhindern?
Danke für Ihre Hilfe. Das ist tolle Arbeit. Können Sie den Grund für das Minus nach 'to_jsonb (t)' erklären? –
Er entfernt Schlüssel "Tag" von Jsonb zurückgegeben von to_jsonb (t), da Sie nur Apfel, Banane und Orange Schlüssel benötigen. –