fix: Aggregate subqueries with push-down `GROUP BY tags`
parent
87dca540a7
commit
f4a19fc6c1
|
@ -542,7 +542,7 @@ SELECT * FROM (SELECT cpu AS foo, usage_idle FROM cpu) GROUP BY cpu;
|
|||
|
||||
-- group by should be pushed to subquery, resulting in COUNTs that are grouped
|
||||
-- TODO(sgc): Fix this
|
||||
-- SELECT * FROM (SELECT COUNT(usage_idle) FROM cpu) GROUP BY cpu;
|
||||
SELECT * FROM (SELECT COUNT(usage_idle) FROM cpu) GROUP BY cpu;
|
||||
|
||||
SELECT * FROM (SELECT usage_idle FROM cpu GROUP BY cpu) GROUP BY cpu;
|
||||
|
||||
|
|
|
@ -2749,6 +2749,28 @@ tags: cpu=cpu1
|
|||
| 2022-10-31T02:00:00 | cpu1 | 1.98 |
|
||||
| 2022-10-31T02:00:10 | cpu1 | 1.99 |
|
||||
+---------------------+------+------------+
|
||||
-- InfluxQL: SELECT * FROM (SELECT COUNT(usage_idle) FROM cpu) GROUP BY cpu;
|
||||
name: cpu
|
||||
tags: cpu=cpu-total
|
||||
+---------------------+-------+
|
||||
| time | count |
|
||||
+---------------------+-------+
|
||||
| 1970-01-01T00:00:00 | 2 |
|
||||
+---------------------+-------+
|
||||
name: cpu
|
||||
tags: cpu=cpu0
|
||||
+---------------------+-------+
|
||||
| time | count |
|
||||
+---------------------+-------+
|
||||
| 1970-01-01T00:00:00 | 2 |
|
||||
+---------------------+-------+
|
||||
name: cpu
|
||||
tags: cpu=cpu1
|
||||
+---------------------+-------+
|
||||
| time | count |
|
||||
+---------------------+-------+
|
||||
| 1970-01-01T00:00:00 | 2 |
|
||||
+---------------------+-------+
|
||||
-- InfluxQL: SELECT * FROM (SELECT usage_idle FROM cpu GROUP BY cpu) GROUP BY cpu;
|
||||
name: cpu
|
||||
tags: cpu=cpu-total
|
||||
|
|
|
@ -747,22 +747,20 @@ impl<'a> InfluxQLToLogicalPlan<'a> {
|
|||
vec![]
|
||||
};
|
||||
|
||||
if let Some(group_by) = ctx.group_by {
|
||||
if group_by.time_dimension().is_some() {
|
||||
// Include the GROUP BY TIME(..) expression
|
||||
group_by_exprs.push(select_exprs[time_column_index].clone());
|
||||
}
|
||||
|
||||
let schema = ds.schema(self.s)?;
|
||||
group_by_exprs.extend(group_by_tag_set.iter().filter_map(|name| {
|
||||
if let Some(InfluxColumnType::Tag) = schema.field_type_by_name(name) {
|
||||
Some(name.as_expr())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}));
|
||||
if ctx.group_by.and_then(|v| v.time_dimension()).is_some() {
|
||||
// Include the GROUP BY TIME(..) expression
|
||||
group_by_exprs.push(select_exprs[time_column_index].clone());
|
||||
}
|
||||
|
||||
let schema = ds.schema(self.s)?;
|
||||
group_by_exprs.extend(group_by_tag_set.iter().filter_map(|name| {
|
||||
if let Some(InfluxColumnType::Tag) = schema.field_type_by_name(name) {
|
||||
Some(name.as_expr())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}));
|
||||
|
||||
group_by_exprs
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue