2013-04-09 85 views
-4

我试图找出一个查询的sqlite的解决我的问题,免除了我的罪,我的老板眼里分组,所以......限制和SQLite中

我有70个000 000行的表

在表中的列中的一个是 另一列称为sourceurl(其为完整的URL串的列结构域是URL的域)

对于大部分结构域(称为域)源Url是唯一的,域不是,您可以从同一个域获得大量源URL。

同桌还包含有标志,如重定向,框架,提,nofollow的其他列,alttext

我需要的是有一个查询,其执行以下操作:

忽略任何的我想将所有剩余的行分组,但是只能从每个域中选择最多10个。

因此,在一天结束时,我需要从每个域取10个样本网址,而这些样本网址需要排除非空的标记。

+3

如何分享你到目前为止试过吗?这不是一个真正的SQL精简版问题,更多的是一个基本的SQL问题。 – diagonalbatman 2013-04-09 14:42:19

+0

这是一个非常基本的问题,快速谷歌提出了stackoverflow的答案。 0为研究技能。 – Pete855217 2013-04-09 14:49:12

+1

我相信你的描述很混乱。一方面,你说“*忽略任何空白*的标志”,另一个“*需要排除非空标志*”。我在这里错过了什么? – 2013-04-09 14:50:23

回答

-1
  • 在SQL的末尾使用LIMIT 10来限制返回的行数 。
  • 在标志周围使用!ifnull函数将行 限制为包含数据的行。
+0

问题要求每组10个记录*,而不是总计10个记录。 – 2013-04-09 16:50:14

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列的索引这个是有些有效。)