jq中的SQL风格GROUP BY聚合函数(COUNT,SUM等) [英] SQL-style GROUP BY aggregate functions in jq (COUNT, SUM and etc)

查看:135
本文介绍了jq中的SQL风格GROUP BY聚合函数(COUNT,SUM等)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

前面提到过类似的问题:

为单个键计数项目:



计算对象值的总和:



问题



如何模拟COUNT聚合函数,该函数的行为应与其SQL原始行为类似?让我们继续扩展这个问题以包含其他常规SQL函数:


  • COUNT

  • SUM / MAX / MIN / AVG
  • ARRAY_AGG



最后一个不是标准的SQL函数 - 它是来自PostgreSQL,但是非常有用。

在输入处有一个有效的JSON对象流。示范让我们选择一个简单的故事,主人和他们的宠物。

模型和数据



基础关系:所有者

  id姓名年龄
1 Adams 25
2 Baker 55
3克拉克40
4戴维斯31

基本关系: Pet <

  id姓名垃圾owner_id 
10 Bella 4 1
20 Lucy 2 1
30 Daisy 3 2
40 Molly 4 3
50 Lola 2 4
60 Sadie 4 4​​
70 Luna 3 4



来源



从上面我们可以得到一个派生关系 Owner_Pet 以上关系的SQL JOIN)以JSON格式呈现给我们的jq查询(源数据):

  {owner_id:1,owner:Adams,age:25,pet_id:10,pet:Bella,litter:4} 
{owner_id :1, owner:Adams,age:25,pet_id:20,pet:Lucy,litter:2}
{owner_id:2, Baker,age:55,pet_id:30,pet:Daisy,litter:3}
{owner_id:3, :40,pet_id:40,宠物:Molly,垃圾:4}
{owner_id:4,所有者:戴维斯,年龄 pet_id:50,pet:Lola,litter:2}
{owner_id:4,所有者:戴维斯,年龄:31,pet_id 宠物:Sadie,垃圾:4}
{owner_id:4,所有者:戴维斯,年龄:31,pet_id:70, Luna,litter:3}



请求



下面是示例请求及其预期输出:


  • COUNT每个拥有者的宠物数量:



  {owner_id:1,owner:Adams,age:25,pets_count: 2} 
{owner_id:2,owner:Baker,age:55,pets_count:1}
{owner_id:3,owner:Clark ,age:40,pets_count:1}
{owner_id:4,owner: 戴维斯,年龄:31,pets_count:3}




  • 为每个所有者取得小孩的数量得到他们的MAX(MIN / AVG):


 {owner_id:1,owner:Adams,age:25,litter_total:6,litter_max:4} 
{owner_id :2,所有者:贝克,年龄:55,litter_total:3,litter_max:3}
{owner_id:3,所有者:克拉克 :40,litter_total:4,litter_max:4}
{owner_id:4,owner:戴维斯,年龄:31,litter_total:9,litter_max :4}



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆