UNKNOWN HAVING groups are dropped.

highlighted = computed this step

HAVING UNKNOWN

A HAVING predicate can be UNKNOWN, and UNKNOWN does not reach output.

UNKNOWN group dropped\text{UNKNOWN group dropped}

Read UNKNOWN groups

HAVING marks 3 groups UNKNOWN and outputs 0 groups.

UNKNOWN groups=3\text{UNKNOWN groups}=3

HAVING examples are tiny finite group-filter transforms; SQL dialect completeness, optimizer behavior, indexing, and product claims are out of scope.

HAVING UNKNOWN drops groups: base rowsidregionstatusqty1eastopen22eastopen33westopen14westclosed45northNULL26northopen1 WHERE before groupingsourceinputwhereTruthgroupedRole0[1, east, open, 2]TRUEgrouped1[2, east, open, 3]TRUEgrouped2[3, west, open, 1]TRUEgrouped3[4, west, closed, 4]TRUEgrouped4[5, north, NULL, 2]TRUEgrouped5[6, north, open, 1]TRUEgrouped GROUP BY bucketskeysourceRowsrowCount[east][0, 1]2[west][2, 3]2[north][4, 5]2 Aggregate facts per groupkeysourceRowsaggregates[east][0, 1]{n:2, total_qty:5}[west][2, 3]{n:2, total_qty:5}[north][4, 5]{n:2, total_qty:3} HAVING result per groupkeypredicatetruthoutputRole[east]total_qty gt NULLUNKNOWNdropped[west]total_qty gt NULLUNKNOWNdropped[north]total_qty gt NULLUNKNOWNdropped HAVING output groupsregionntotal_qtynonenonenone HAVING factsfactvalueinputRowCount6whereKeptRows6whereDroppedRows0groupCount3aggregateCount2outputGroupCount0havingTrueCount0havingFalseCount0havingUnknownCount3groupOrderfirst_seen_after_wherepipelineWHERE_before_GROUP_BY_then_HAVING

TRUE only

The final output still keeps TRUE groups only.

TRUE only\text{TRUE only}

Summary

UNKNOWN is shown before it is dropped.

UNKNOWN visible\text{UNKNOWN visible}