You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lnav/src/prql/stats.prql

49 lines
1.1 KiB
Plaintext

let count_by = func column rel <relation> -> <relation> (
rel
group {column} (aggregate {total = count this})
sort {-total}
)
let average_of = func column rel <relation> -> <relation> (
rel
aggregate {value = average column}
)
let sum_of = func column rel <relation> -> <relation> (
(rel | aggregate {total = sum column})
)
let by = func column values rel <relation> -> <relation> (
rel
group {column} (aggregate values)
)
let hist = func column slice:'1h' top:10 rel <relation> -> (
rel
group { tslice = (time.slice log_time_msecs slice), column } (
aggregate { total = count this }
)
group { tslice } (
window (
sort {-total}
derive {rn = row_number column}
)
)
derive top_value = case [
rn < top => column,
rn >= top => 'Other',
]
group { tslice, top_value } (
aggregate { total2 = sum total }
)
group { tslice } (
window (
sort {-total2}
# XXX The `take` here is necessary to workaround a
# PRQL issue where the above sort is dropped entirely
take top
aggregate { v = json.group_object top_value total2 }
)
)
)