SQL如何按日期列分组统计列总数并展示该列去重后的值
SQL分组统计+去重拼接平台名实现方案
该需求完全可以实现,不同数据库使用对应的字符串聚合函数即可实现去重后平台名的拼接展示,你原有SQL里FROM database写法有误,需替换为实际的表名。
不同主流数据库实现代码
MySQL
使用GROUP_CONCAT函数实现拼接,支持直接加DISTINCT去重:
注意:如果单天平台数量较多,需提前调整SELECT CreatedAt, COUNT(PlatformName) AS `Count(PlatformName)`, GROUP_CONCAT(DISTINCT PlatformName ORDER BY PlatformName SEPARATOR ', ') AS `PlatformName(without duplicates)` FROM 替换为你的实际表名 GROUP BY CreatedAt ORDER BY CreatedAt;group_concat_max_len参数,避免拼接结果被截断。PostgreSQL
使用STRING_AGG函数实现:SELECT CreatedAt, COUNT(PlatformName) AS "Count(PlatformName)", STRING_AGG(DISTINCT PlatformName, ', ' ORDER BY PlatformName) AS "PlatformName(without duplicates)" FROM 替换为你的实际表名 GROUP BY CreatedAt ORDER BY CreatedAt;SQL Server(2017及以上版本)
使用STRING_AGG函数,搭配WITHIN GROUP指定排序规则:SELECT CreatedAt, COUNT(PlatformName) AS [Count(PlatformName)], STRING_AGG(DISTINCT PlatformName, ', ') WITHIN GROUP (ORDER BY PlatformName) AS [PlatformName(without duplicates)] FROM 替换为你的实际表名 GROUP BY CreatedAt ORDER BY CreatedAt;Oracle(19c及以上版本)
使用LISTAGG函数实现:SELECT CreatedAt, COUNT(PlatformName) AS "Count(PlatformName)", LISTAGG(DISTINCT PlatformName, ', ') WITHIN GROUP (ORDER BY PlatformName) AS "PlatformName(without duplicates)" FROM 替换为你的实际表名 GROUP BY CreatedAt ORDER BY CreatedAt;
补充说明
如果你需要统计的是单天去重后的平台数量,把COUNT(PlatformName)替换为COUNT(DISTINCT PlatformName)即可。
内容的提问来源于stack exchange,提问作者tadeo soresi
相关产品推荐
相关产品推荐

