Skip to content

Commit 22a6b6c

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

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

+23
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,29 @@ SELECT COUNT(first_name)=COUNT(DISTINCT first_name) AS areEqual, COUNT(first_nam
634634
true |90 |90
635635
;
636636

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

-4
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)