【问题标题】:Group by variable substring in MySQL在 MySQL 中按变量子字符串分组
【发布时间】:2021-08-04 13:07:58
【问题描述】:

我有一个包含多个字段的表格 - 比如说 FieldAFieldB 等,最后是 LocationLocation 字段的值如下:

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))

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

【问题讨论】:

    标签: mysql group-by substring


    【解决方案1】:

    明智地使用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 的内部调用返回http://192.168.1.10,这是第三个​​ 正斜杠left 的所有内容。然后,外部调用将所有内容返回到 last 正斜杠的 right,这给我们留下了 IP 地址。

    【讨论】:

    • 超级!有用!谢谢!你愿意详细说明它是如何工作的吗?需要教育。或者发布一个“For Dummies”类教程的链接?
    • @Chiwda 我已经添加了解释。如果您仍然看不到它,请尝试使用我在回答中提供的演示链接进行更多探索。
    • 实际上,我想知道为什么 GROUP BY 不起作用,为什么 DISTINCT 起作用。
    猜你喜欢
    • 2015-07-05
    • 2014-01-10
    • 2014-02-07
    • 2012-07-15
    • 2011-11-20
    • 2016-03-29
    • 2013-03-19
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多