首页 > 解决方案 > GROUP BY 在一列中匹配多个文本

问题描述

给定以下数据:

URL
some_url.com
some_url.com
some_url.co.uk
some_other_url.com
some_other_url.co.uk
some_other_url.co.uk
some_other_url.org

有没有办法构造一个查询结果;

some_url         3
some_other_url   4

目前,我要么通过 url 使用标准组,要么使用 LIKE 逐个查询聚合。有没有办法在一个查询中做到这一点?(目前使用 mysql,但会将这些数据转移到 postgresql)

添加一列以反映此分组(在插入时)会更好吗?(这感觉多余,但我猜会是最好的表现)

编辑:数据可以包含 www 和非 www 以及 http、https。此外,我还必须在其他包含(自由)文本值的列上做类似的事情。

标签: mysqlsqlpostgresql

解决方案


在 mysql 中使用SUBSTRING_INDEX它可以帮助您在指定数量的分隔符出现之前从字符串中提取子字符串。

select count(*) as cnt, SUBSTRING_INDEX(c,'.',1) as val from cte
group by  SUBSTRING_INDEX(c,'.',1)

推荐阅读