Skip to content

Commit fd06783

Browse files
committed
Have COUNT DISTINCT return 0 instead of NULL for no documents matching. (#50037)
(cherry picked from commit cb94731)
1 parent 9f45cc6 commit fd06783

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

x-pack/plugin/sql/qa/src/main/resources/agg.csv-spec

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,29 @@ SELECT COUNT(first_name)=COUNT(DISTINCT first_name) AS areEqual, COUNT(first_nam
635635
true |90 |90
636636
;
637637

638+
aggCountWithNull
639+
schema::COUNT(*):l|COUNT(DISTINCT languages):l|languages:bt
640+
SELECT COUNT(*), COUNT(DISTINCT languages), languages FROM test_emp GROUP BY languages ORDER BY languages DESC;
641+
642+
COUNT(*) |COUNT(DISTINCT languages)| languages
643+
---------------+-------------------------+---------------
644+
21 |1 |5
645+
18 |1 |4
646+
17 |1 |3
647+
19 |1 |2
648+
15 |1 |1
649+
10 |0 |null
650+
;
651+
652+
aggCountZeroDocuments
653+
schema::COUNT(*):l|COUNT(DISTINCT languages):l
654+
SELECT COUNT(*), COUNT(DISTINCT languages) FROM test_emp WHERE languages > 100;
655+
656+
COUNT(*) |COUNT(DISTINCT languages)
657+
---------------+-------------------------
658+
0 |0
659+
;
660+
638661
aggCountAllEquality
639662
schema::areEqual:b|afn:l
640663
SELECT COUNT(first_name)=COUNT(ALL first_name) AS areEqual, COUNT(ALL first_name) afn FROM test_emp;

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/execution/search/extractor/MetricAggExtractor.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.elasticsearch.search.aggregations.bucket.filter.InternalFilter;
1313
import org.elasticsearch.search.aggregations.matrix.stats.InternalMatrixStats;
1414
import org.elasticsearch.search.aggregations.metrics.InternalAvg;
15-
import org.elasticsearch.search.aggregations.metrics.InternalCardinality;
1615
import org.elasticsearch.search.aggregations.metrics.InternalMax;
1716
import org.elasticsearch.search.aggregations.metrics.InternalMin;
1817
import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation;
@@ -149,9 +148,6 @@ private static boolean containsValues(InternalAggregation agg) {
149148
if (agg instanceof InternalAvg) {
150149
return hasValue((InternalAvg) agg);
151150
}
152-
if (agg instanceof InternalCardinality) {
153-
return hasValue((InternalCardinality) agg);
154-
}
155151
if (agg instanceof InternalSum) {
156152
return hasValue((InternalSum) agg);
157153
}

0 commit comments

Comments
 (0)