是否有可能找到与纯MySQL最不同的值?

时间:2015-08-18 18:55:06

标签: mysql

假设我有一个网址列表,我想找出最独特的网址。我的意思是哪个出现的最少。以下是数据库的示例:

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

2 个答案:

答案 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

working fiddle