【发布时间】: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