2011-05-23 65 views
2

我有一个SQL查询其计算表不同fileIds的数量。下面给出的查询,需要嵌套的SQL查询,这需要计数第一个查询和计算出新的计

SELECT DISTINCT `fileId` AS FileId, Count(FileId) AS NumberOfTags 
FROM `Tag` 
GROUP BY `fileId` 
ORDER BY NumberOfTags DESC 

此查询的输出如下,

FileId. NumberOfTags 

1 500 

2 500 

3 550 

4 550 

5 550 

我需要得到每个NumberOfTag值下未来的文件数的计数。示例输出应该与此类似

NumberOfTags Number of Files 

500 2 

550 3 

第一个查询的结果非常大,它有大约3百万行。我试图创建第一个查询结果的表,但它也失败,错误

ERROR 1206 (HY000): The total number of locks exceeds the lock table size 

有人可以告诉我如何创建一个嵌套查询做这个任务。

在此先感谢。

回答

3

不知道,我发现了问题,但它听起来像是你需要一个子查询:

SELECT NumberOfTags, COUNT(FileId) as NumberOfFiles 
FROM (
    SELECT `fileId` AS FileId, Count(FileId) AS NumberOfTags 
    FROM `Tag` 
    GROUP BY `fileId` 
) as rows 
GROUP BY NumberOfTags 
+0

感谢名单一堆,它的工作:) – Paba 2011-05-23 19:25:58

1

丹尼斯查询是你会怎么做是正确的。

只是为了解释为什么它的工作原理,当你要嵌套查询你用括号包围它,并给它分配一个名称创建嵌套查询输出一个临时表“作为”。

选择< ...> From(nested query)as SomeTempTableName;