2011-05-23 88 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;