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

是否有可能找到与纯Sqlite3最不同的值?,sqlite,Sqlite,假设我有一个url列表,我想找出出现次数最少的域。以下是数据库的一个示例: 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

假设我有一个url列表,我想找出出现次数最少的域。以下是数据库的一个示例:

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。我只想要一个返回值。对于纯Sqlite3,这可能吗

它应该是在.de之前对主url进行某种计数

此时此刻,我这样做:

con.execute("select url, date from urls_to_visit ORDER BY RANDOM() LIMIT 1")

下面是一个应该正确处理此问题的查询:

选择substrurl,1,instrurl'.de'-1 从URL到访问 其中url类似于“%.de%” -保险,如果你确定整张桌子都匹配的话,可以省略 按子序列1、子序列1、子序列“.de'-1”分组 按计数排序*ASC,随机 限值1; 按我们要排序的对象分组,然后按计数排序*。此表达式提取.de/之前的URL部分:

RANDOM可确保随机打破平局,而不是遵循表格的自然顺序。*只有在出现平局时才起作用,如中所述


*从技术上讲,行不会以自然顺序出现,而是以任意顺序出现。这意味着查询计划器最方便的顺序。数据库系统通常使用或变体,这是一种稳定的排序,因此将按照行输入排序算法的顺序一致地断开关系。除非查询可以从索引查找中获得显著的好处(这一点几乎肯定不能),否则最有可能的查询计划是全表扫描,因此排序通常会按照自然顺序结束。但是您不能依赖这些,因为标准没有正式要求它。

所有域都以.de结尾吗?是的。我只有一个,谢谢你,行得通。唯一的问题是当我扩展限制时,我看到值是按字母顺序排列的。有没有办法避免这种情况?换句话说。以b c开头的域比x y更受欢迎z@Eternal_Sunshine当前位置我想,关系是按自然顺序打破的,即表中各行出现的顺序。我假设您是在URL上进行集群,因为这会产生这种排序,或者可能只是SQLite的一个工件。如果你需要按随机顺序打破领带,你可以在计数后加上随机数。你能给我看一下随机数的整个例子吗?因为如果我考虑随机性,那么它会再次破坏有限性的影响。
substr(url, 1, instr(url, '.de')-1)