假设我有一个网址列表,我想找出最独特的网址。我的意思是哪个出现的最少。以下是数据库的示例:
3598 ('www.emp.de/blog/tag/fear-factory/',)
3599 ('www.emp.de/blog/tag/white-russian/',)
3600 ('www.emp.de/blog/musik/die-emp-plattenkiste-zum-07-august-2015/',)
3601 ('www.emp.de/Warenkorb/car_/',)
3602 ('www.emp.de/ter_dataprotection/',)
3603 ('hilfe.monster.de/my20/faq.aspx#help_1_211589',)
3604 ('jobs.monster.de/l-nordrhein-westfalen.aspx',)
3605 ('karriere-beratung.monster.de',)
3606 ('karriere-beratung.monster.de',)
在这种情况下,它应该返回jobs.monster.de或hilfe.monster.de。我只想要一个返回值。纯粹的mysql可以吗?
在" .de"
之前应该对主网址进行某种计数。此刻我这样做:
con.execute("select url, date from urls_to_visit ORDER BY RANDOM() LIMIT 1")
答案 0 :(得分:0)
鉴于你的样本数据(忽略括号,因为我不知道它们在做什么),这个查询应该做你想做的事情:
select substring_index(url, '.', 2) as domain, count(*) as cnt
from table t
group by substring_index(url, '.', 2)
order by cnt desc
limit 1;
答案 1 :(得分:0)
你可以加入自己的表格,其中ID不相同并计算,然后按降序排列并限制为1个结果。
未选中。
SELECT COUNT(*) as hitcount,
SUBSTRING_INDEX(t1.`url`,'.',2) as url
FROM table t1
INNER JOIN table t2 ON
SUBSTRING_INDEX(t1.`url`,'.',2) = SUBSTRING_INDEX(t2.`url`,'.',2)
AND t1.id <> t2.id
GROUP BY SUBSTRING_INDEX(t1.`url`,'.',2)
ORDER BY hitcount ASC
LIMIT 1
修改强>
刚刚检查了这一点,它并没有完全奏效。
我提出了这个替代方案,它使用子查询将所有域组合在一起并获得计数。
SELECT subq.count as hitcount,SUBSTRING_INDEX(t1.`url`,'.',2) as domain
FROM hits t1
INNER JOIN
(SELECT COUNT(*) as count,
SUBSTRING_INDEX(`url`,'.',2) as domain
FROM hits GROUP BY SUBSTRING_INDEX(`url`,'.',2)
) subq
ON subq.domain = SUBSTRING_INDEX(t1.`url`,'.',2)
GROUP BY SUBSTRING_INDEX(t1.`url`,'.',2)
ORDER BY hitcount ASC
LIMIT 1