按 MySQL 中的变量子字符串分组

Group by variable substring in MySQL

我有一个包含多个字段的 table - 比方说 FieldAFieldB 等等,最后是 位置Location 字段的值如下:

http://192.168.1.10/location?n=5
http://192.168.1.10/location?n=8
http://192.168.15.6/location?n=1
http://192.168.0.9/location?n=11
http://192.168.15.6/location?n=5
http://192.168.0.9/location?n=6
http://192.168.1.10/location?n=2

我需要在 Location 字段中获取 IP 地址的唯一值。换句话说,从上面的示例数据中,我应该得到

http://192.168.1.10
http://192.168.15.6
http://192.168.0.9

基于 this answer,我正在使用以下 SQL - 运气不佳

SELECT * FROM `table` WHERE FieldA = 'Example' GROUP BY (SELECT SUBSTRING_INDEX("`table`.Location", "/", 3))

上面只给了我一条记录。我做错了什么?

明智地使用 SUBSTRING_INDEX:

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(Location, '/', 3), '/', -1) AS distinct_ips
FROM yourTable;

Demo

有关上述逻辑如何工作的解释,请考虑位置值 http://192.168.1.10/location?n=5。对 SUBSTRING_INDEX returns http://192.168.1.10 的内部调用,这是 third 前向 left 的所有内容削减。然后,外部将 returns 一切都调用到 last 正斜杠的 right,这给我们留下了 IP 地址。