【问题标题】:elasticsearch like select ... where ... group by ... havingelasticsearch like select ... where ... group by ... 有
【发布时间】:2023-03-31 16:28:02
【问题描述】:

在elasticsearch中,如何实现这样的SQL功能:

SELECT a, sum(b), sum(c), d
FROM TableA 
WHERE a IN (1,2,3,4) AND d = 88 
GROUP BY a 
HAVING sum(b) > 10 
ORDER BY sum(b) desc, sum(c) asc 
LIMIT 10 OFFSET 5;

到目前为止,我只这样做了:

{
    "size":0,
    "query":{
        "filtered": {
            "filter":{
                "terms":{
                    "a": [1, 2, 3, 4]
                }
            },
            "query":{
                "match": {
                    "d": 8
                }
            }
        }
    },

    "aggs": {
        "group_by_a":{
            "terms":{
                "field": "a",
                "size": 10,
                "order" : { "sum(b)" : "desc" }
            },
            "aggs" : {
                "sum(b)": {"sum": {"field": "b"}},
                "sum(c)": {"sum": {"field": "c"}}
            }
        }
    }
}

就像我刚刚实现了这个:

SELECT a, sum(b), sum(c)
FROM TableA 
WHERE a IN (1,2,3,4) AND d = 88 
GROUP BY a 
HAVING sum(b) > 10 
ORDER BY sum(b) desc
LIMIT 10;

以及如何处理额外的返回字段d、有条件、sum(c) asc的额外顺序和偏移量5 ?

很遗憾,我发现 有子句 目前是 unsupported

【问题讨论】:

  • 使用elasticsearch的聚合函数,顺便说一句,你达到了多少?告诉我们你到目前为止做了什么。谢谢
  • @dark_shadow 谢谢你的回复,我已经添加了我所做的。
  • 嗨 @flowyi - 仅供参考:我们刚刚在新的测试版本 0.43.0 中添加了对 Crate Data 的支持。见crate.io/docs/en/0.43.0/sql/queries.html#having

标签: sql elasticsearch having


【解决方案1】:

这在 5.2 中实现为 bucket selector aggregation,例如

GET /_search
{
    "size": 0,
    "query": {
        "term": { "code": "16001" }
    },
    "aggs" : {
        "errors_per_week" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "week"
            },
            "aggs": {
                "total_errors": {
                    "value_count": {
                        "field": "code"
                    }
                },
                "error_bucket_filter": {
                    "bucket_selector": {
                        "buckets_path": {
                          "totalErrors": "total_errors"
                        },
                        "script": "params.totalErrors > 5"
                    }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多