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

时间:2015-08-18 23:10:04

标签: sqlite

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

{{partial 'navigation'}}
{{outlet}}
{{partial 'footer'}}

在这种情况下,它应该返回jobs.monster.de或hilfe.monster.de。我只想要一个返回值。纯粹的Sqlite3可以吗?

应该在“.de”

之前对主网址进行某种计数

此刻我这样做:

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

1 个答案:

答案 0 :(得分:2)

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

SELECT substr(url, 1, instr(url, '.de')-1)
FROM urls_to_visit
WHERE url LIKE '%.de%'
-- insurance, can leave out if you're sure the whole table matches
GROUP BY substr(url, 1, instr(url, '.de')-1)
ORDER BY count(*) ASC, RANDOM()
LIMIT 1;

对我们想要排序的事物进行分组,然后按count(*)排序。此表达式在.de/

之前提取URL的一部分
substr(url, 1, instr(url, '.de')-1)

RANDOM()确保关系被随机打破,而不是遵循表格的自然顺序。*如果存在平局,才会发挥作用,如the SQLite documentation

*从技术上讲,行不会以自然顺序显示,而是以任意顺序显示。这意味着查询计划程序最方便的顺序。数据库系统通常使用merge sort或变量,这是一种稳定的排序,因此关系将按照行输入排序算法的顺序一致地中断。除非查询可以从索引查找中获益,而这几乎肯定不能,但最有可能的查询计划是全表扫描,因此排序通常会遵循自然顺序。 但是你不能依赖这些,因为标准没有正式要求它。