如何实现多列count(distinct)统计且无需使用子查询
无需子查询实现多列COUNT(DISTINCT)的方法
不同数据库支持的语法存在差异,常见的可行方案如下:
原生语法支持
PostgreSQL、MySQL 8.0及以上版本等数据库原生支持多列作为COUNT(DISTINCT)的入参,可直接使用对应写法:-- PostgreSQL 写法,将多列包装为元组传入 SELECT COUNT(DISTINCT (colA, colB)) FROM mytable; -- MySQL 写法,直接传入多列即可 SELECT COUNT(DISTINCT colA, colB) FROM mytable;这类写法的性能和子查询方案基本持平,也不存在数据误判的风险,是优先选择的方案。
通用字符串拼接方案
如果使用的数据库不支持上述原生语法,可以通过带特殊分隔符的字符串拼接实现,注意要选择两个字段中都不会出现的字符作为分隔符,同时处理NULL值避免统计偏差:SELECT COUNT(DISTINCT CONCAT( COALESCE(colA, 'NULL_PLACEHOLDER'), '|-|SEP|-|', COALESCE(colB, 'NULL_PLACEHOLDER') )) FROM mytable;该方案性能略低于原生语法和子查询方案,仅作为兼容低版本/小众数据库的备选。
内容的提问来源于stack exchange,提问作者econmajorr
相关产品推荐
相关产品推荐

