我的 table 上有来自不同国家的数千个优惠。有些优惠在不同国家/地区的不同域上运行。例如,supershop 为三个不同的国家/地区运行三个不同的域:
supershop.com、supershop.fr 和 supershop.nl
在我的数据库中,URL 条目可能看起来不同:
http://supershop.com
https://www.supershop.fr/home/index.php
https://supershop.nl
现在,我如何选择具有相同 SLD(二级域名)名称的所有行?
应该是这样的
SELECT
landingpage,
COUNT(landingpage)
FROM
angebote
GROUP BY REGEXP "^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}"
HAVING COUNT(landingpage) > 1
按此部分分组:[\.A-Za-z0-9\-]
有什么解决方案/提示吗?
最佳答案
您可以使用REGEXP_REPLACE
从每个 URL 中提取二级域,然后对该值进行 GROUP BY:
SELECT REGEXP_REPLACE(landingpage, "^(?:https?://(?:www\\.)?)([A-Za-z0-9-]+)\\.[a-zA-Z]{2,4}(/.*)?$", "\\1") AS sld,
COUNT(*) AS count
FROM angebote
GROUP BY sld
输出(用于您的示例数据)
sld count
supershop 3
请注意,我对您的正则表达式进行了一些细微修改,使其与 REGEXP_REPLACE
一起提取二级域。
关于MySQL:查找所有多个二级域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184970/