Oracle中合并两列后统计第三列的distinct行数
正确SQL实现方案
你的SQL存在两个关键问题:
- 缺少
GROUP BY子句,未按拼接后的账户组合分组,导致只会返回全局汇总结果,而非每个组合的单独统计 - 字符串拼接格式不符合需求,目标是
prefix & value(带空格和连接符&),直接拼接会得到无分隔的字符串
以下是适配不同数据库的正确实现:
Oracle/PostgreSQL
SELECT prefix || ' & ' || value AS "账户(Account)", COUNT(DISTINCT thirdcolumn) AS "统计数(Totals)" FROM Transactions GROUP BY prefix, value
注:用
GROUP BY prefix, value比分组拼接后的字符串性能更优,且能避免极端情况下的拼接冲突
MySQL/MariaDB
SELECT CONCAT(prefix, ' & ', value) AS `账户(Account)`, COUNT(DISTINCT thirdcolumn) AS `统计数(Totals)` FROM Transactions GROUP BY prefix, value
SQL Server
SELECT CONCAT(prefix, ' & ', value) AS [账户(Account)], COUNT(DISTINCT thirdcolumn) AS [统计数(Totals)] FROM Transactions GROUP BY prefix, value
关键说明
- 必须通过
GROUP BY指定分组依据,确保每个prefix+value组合单独统计 - 严格按照需求拼接字符串,加入
&分隔符保证输出格式正确 - 不同数据库的标识符引号规则不同:Oracle用双引号,MySQL用反引号,SQL Server用方括号,需对应使用
内容的提问来源于stack exchange,提问作者tree
相关产品推荐
相关产品推荐

