Skip to content

Commit cb94731

Browse files
authored
Have COUNT DISTINCT return 0 instead of NULL for no documents matching. (#50037)
1 parent a3482e8 commit cb94731

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
@@ -657,6 +657,29 @@ SELECT COUNT(first_name)=COUNT(DISTINCT first_name) AS areEqual, COUNT(first_nam
657657
true |90 |90
658658
;
659659

660+
aggCountWithNull
661+
schema::COUNT(NULL):l|COUNT(*):l|COUNT(DISTINCT languages):l|languages:bt
662+
SELECT COUNT(NULL), COUNT(*), COUNT(DISTINCT languages), languages FROM test_emp GROUP BY languages ORDER BY languages DESC;
663+
664+
COUNT(NULL) | COUNT(*) |COUNT(DISTINCT languages)| languages
665+
---------------+---------------+-------------------------+---------------
666+
null |21 |1 |5
667+
null |18 |1 |4
668+
null |17 |1 |3
669+
null |19 |1 |2
670+
null |15 |1 |1
671+
null |10 |0 |null
672+
;
673+
674+
aggCountZeroDocuments
675+
schema::COUNT(NULL):l|COUNT(*):l|COUNT(DISTINCT languages):l
676+
SELECT COUNT(NULL), COUNT(*), COUNT(DISTINCT languages) FROM test_emp WHERE languages > 100;
677+
678+
COUNT(NULL) | COUNT(*) |COUNT(DISTINCT languages)
679+
---------------+---------------+-------------------------
680+
null |0 |0
681+
;
682+
660683
aggCountAllEquality
661684
schema::areEqual:b|afn:l
662685
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)