高峰只对攀登它而不是仰望它的人来说才有真正意义。

es 分组后求总分第一的数据

Elasticsearch | 作者 Kevin_23 | 发布于2023年06月02日 | 阅读数:2159

数据如下
     class     |     name      |     score     |  student_id   |    subject    
---------------+---------------+---------------+---------------+---------------
1              |张三             |85.5           |1              |Math           
1              |张三             |83.5           |1              |yuwen          
1              |张三             |84.0           |1              |English        
1              |李四             |92.0           |2              |English        
1              |李四             |99.0           |2              |Math           
1              |王五             |92.0           |3              |English        
2              |2张三            |87.0           |4              |Math           
2              |2张三            |80.0           |4              |yuwen          
2              |2张三            |84.0           |4              |English        
2              |2李四            |92.0           |5              |English        
2              |2李四            |99.0           |5              |Math           
2              |2王五            |92.0           |6              |English        
 
 
我需要查询每个班级 总分第一名的人和总分,查询结果为
class        name          student_id        sum
1              |张三           |1                      |253.0
2              |2张三         |4                      |251.0
 
这中查询怎么写啊
 
已邀请:

wulI

赞同来自: liaosy Kevin_23

可以参考下,最终效果如下

ES.png


ES_result.png

 

wulI

赞同来自: Kevin_23

嗯,看起来是差最后一步了

Kevin_23 - 渣渣源

赞同来自:

现在我只想到这样查询
 
GET /students/_search
{
"size": 0,
"aggs": {
"class_avg_score": {
"terms": {
"field": "class",
"size": 10
},
"aggs": {
"students": {
"terms": {
"field": "student_id",
"size": 10
},
"aggs": {
"total_score": {
"sum": {
"field": "score"
}
}
}
}
}
}
}
}
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 12,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "class_avg_score" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "1",
          "doc_count" : 6,
          "students" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "1",
                "doc_count" : 3,
                "total_score" : {
                  "value" : 253.0
                }
              },
              {
                "key" : "2",
                "doc_count" : 2,
                "total_score" : {
                  "value" : 191.0
                }
              },
              {
                "key" : "3",
                "doc_count" : 1,
                "total_score" : {
                  "value" : 92.0
                }
              }
            ]
          }
        },
        {
          "key" : "2",
          "doc_count" : 6,
          "students" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "4",
                "doc_count" : 3,
                "total_score" : {
                  "value" : 251.0
                }
              },
              {
                "key" : "5",
                "doc_count" : 2,
                "total_score" : {
                  "value" : 191.0
                }
              },
              {
                "key" : "6",
                "doc_count" : 1,
                "total_score" : {
                  "value" : 92.0
                }
              }
            ]
          }
        }
      ]
    }
  }
}



 但是查询结果 不知道再怎么查询 总分第一的。

要回复问题请先登录注册