SQL实现三列合并为单列并统计各值出现次数的方法
问题解答
可否使用UNION ALL实现
完全可以,UNION ALL是实现该需求兼容性最高的方案,支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流关系型数据库。
具体实现代码
通用UNION ALL方案
SELECT val AS newColumn, COUNT(*) AS count FROM ( -- 依次取出三列的所有值,合并为单列的行集合 SELECT myColumnX AS val FROM 你的实际表名 UNION ALL SELECT myColumnY AS val FROM 你的实际表名 UNION ALL SELECT myColumnZ AS val FROM 你的实际表名 ) AS merged_values GROUP BY val ORDER BY val
说明:必须使用
UNION ALL而不是UNION,后者会自动对合并后的结果去重,导致统计的出现次数少于实际值。替换代码中的你的实际表名为你的数据表名称,执行后即可得到你预期的统计结果。
特定数据库简化写法
如果你使用的是PostgreSQL、ClickHouse等支持数组展开函数的数据库,可以使用更简洁的写法:
SELECT unnest(ARRAY[myColumnX, myColumnY, myColumnZ]) AS newColumn, COUNT(*) AS count FROM 你的实际表名 GROUP BY newColumn ORDER BY newColumn
内容的提问来源于stack exchange,提问作者AL0290
相关产品推荐
相关产品推荐

