按 MySQL 中的变量子字符串分组
Group by variable substring in MySQL
我有一个包含多个字段的 table - 比方说 FieldA、FieldB 等等,最后是 位置。 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;
有关上述逻辑如何工作的解释,请考虑位置值 http://192.168.1.10/location?n=5
。对 SUBSTRING_INDEX
returns http://192.168.1.10
的内部调用,这是 third 前向 left 的所有内容削减。然后,外部将 returns 一切都调用到 last 正斜杠的 right,这给我们留下了 IP 地址。
我有一个包含多个字段的 table - 比方说 FieldA、FieldB 等等,最后是 位置。 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;
有关上述逻辑如何工作的解释,请考虑位置值 http://192.168.1.10/location?n=5
。对 SUBSTRING_INDEX
returns http://192.168.1.10
的内部调用,这是 third 前向 left 的所有内容削减。然后,外部将 returns 一切都调用到 last 正斜杠的 right,这给我们留下了 IP 地址。