Grouping and Aggregating¶
Grouping records by key¶
Group records according to a property.
jq¶
echo '[{"category":"A","value":10},{"category":"B","value":20},{"category":"A","value":5}]' |
jq 'group_by(.category)'
JFTL¶
TBD
Output¶
[
[
{ "category": "A", "value": 10 },
{ "category": "A", "value": 5 }
],
[
{ "category": "B", "value": 20 }
]
]
Complete JFTL example¶
TBD
Aggregating grouped values¶
Group records and calculate a sum for each group.
jq¶
echo '[{"category":"A","value":10},{"category":"B","value":20},{"category":"A","value":5}]' |
jq 'group_by(.category) | map({category: .[0].category, sum: (map(.value) | add)})'
JFTL¶
TBD
Output¶
[
{ "category": "A", "sum": 15 },
{ "category": "B", "sum": 20 }
]
Complete JFTL example¶
TBD
Filtering after aggregating¶
Aggregate groups and keep only groups whose aggregate matches a condition.
jq¶
echo '[{"category":"A","value":10},{"category":"B","value":20},{"category":"A","value":5}]' |
jq 'group_by(.category) | map({category: .[0].category, sum: (map(.value) | add)}) | map(select(.sum > 17))'
JFTL¶
TBD
Output¶
[
{ "category": "B", "sum": 20 }
]
Complete JFTL example¶
TBD
Custom aggregations¶
Use an accumulator to calculate a value across a list of records.
jq¶
echo '[{"value":10},{"value":20},{"value":30}]' |
jq 'reduce .[] as $item (0; . + $item.value)'
JFTL¶
{
"$": true,
"set": { "total": 0 },
"foreach": {
"in": "$",
"update": { "total": "$py=total + _['value']" }
},
"out": "$total"
}
Output¶
60
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{
"$": true,
"set": { "total": 0 },
"foreach": {
"in": "$",
"update": { "total": "$py=total + _['value']" }
},
"out": "$total"
}
},
"datasets": {
"input": [
{ "value": 10 },
{ "value": 20 },
{ "value": 30 }
]
}
}