在sqlite中限制和分组

时间:2013-04-09 14:39:00

标签: sql sqlite

我想找出一个关于sqlite的查询来解决我的问题并在我老板的眼中解除我的罪过,所以......

我有一张70 000 000行的表

表中的一列是域(称为域) 另一列称为sourceurl(这是一个完整的url字符串,其列域是url的域)

大部分来源Url都是唯一的,域名不是,您可以拥有来自同一域的多个源网址。

同一个表还包含其他列,这些列是重定向,框架,提及,nofollow,alttext等标志

我需要的是查询执行以下操作:

忽略任何null的标志,结果数据我想将所有剩余的行分组,但只从每个域中选择最多10个。

因此,在一天结束时,我需要来自每个域的10个示例网址,这些示例网址需要排除非null的标记。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT domain,
       sourceurl
FROM MyTable AS T1
WHERE redirect <> 0  -- or whatever funny thing you want to do with the flags
  AND rowid <= IFNULL((SELECT rowid
                       FROM MyTable AS T2
                       WHERE T2.domain = T1.domain
                         AND redirect <> 0  -- same flags filter
                       ORDER BY rowid
                       LIMIT 1
                       OFFSET 9), 'inf')

(您需要domain列上的索引才能提高效率。)

答案 1 :(得分:-1)

  • 在SQL末尾使用LIMIT 10来限制行数 回。
  • 在标志周围使用!ifnull函数来限制行 那些包含数据的人。