-4

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

我有一个有 70 000 000 行的表

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

在大多数情况下,源 URL 是唯一的,而域不是,您可以拥有来自同一域的多个源 URL。

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

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

忽略结果数据中任何为空的标志,我想对所有剩余的行进行分组,但随后最多只能从每个域中选择 10 个。

所以在一天结束时,我需要来自每个域的 10 个示例 url,并且这些示例 url 需要排除不为空的标志。

4

2 回答 2

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,这样才能有点效率。)

于 2013-04-09T17:00:24.387 回答
-1
  • 在 SQL 末尾使用 LIMIT 10 来限制返回的行数。
  • 在标志周围使用 !ifnull 函数将行限制为包含数据的行。
于 2013-04-09T14:48:26.560 回答