mysql - GROUP BY 一列中的多个文本匹配

标签 mysql sql postgresql

给定的数据如下:

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)

添加一列以反射(reflect)此分组(在插入时)是否更好? (这感觉多余,但我想效果最好)

编辑: 数据可以包含 www 和非 www 以及 http、https。此外,我还必须对包含(自由)文本值的其他列执行类似的操作。

最佳答案

这是符合 ANSI SQL 标准的,应该可以与 MySQL 和 Postgresql 一起使用:

select url, count(*)
from
(
    select substring(url from 1 for position('.' in url) -1) as url
    from tablename
) dt
group by url

使用 position() 找到第一个 . 字符。执行 substring(),最后 GROUP BY 结果。

关于mysql - GROUP BY 一列中的多个文本匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642292/

相关文章:

mysql - 如何估计 SQL 查询时间?

php - 使用 WEHERE 的 SQL 语法错误

sql - psql 从 table=# 更改为 table(#

postgresql - Union-all postgresql select 子句保留顺序

mysql - MariaDB 区分大小写

php - 如何使用php在行之间获取字符串

mysql - 我如何格式化 mysql 查询以利用异步/ promise ?

mysql - 使用 count 函数对两个表中的记录进行计数,即使计数为零也返回相同的记录

mysql - SQL 使用 Select 向列表添加值

sql - 将一些行更改为列