2014-07-21 78 views
0

如果I型Sql數據組合?

SELECT petid1, COUNT(*) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1 
ORDER BY total DESC 

它將輸出以下數據

enter image description here

如果I型

SELECT petid2, COUNT(*) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2 
ORDER BY total DESC 

它將輸出以下數據

enter image description here

我該如何分組同樣的結果呢? 例如petid1 = 1218總計結果+ petid2 = 1218總計結果= 20 + 9 = 29

回答

1

加入結果查詢併合並總計。不知道你正在使用的數據庫,但應該是這樣的:

SELECT petid1, petid2, (a.total + b.total) as combinedtotal 
FROM 
    (SELECT petid1, COUNT(*) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1) a 
INNER JOIN 
    (SELECT petid2, COUNT(*) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2) b 
ON a.petid1 = b.petid2 
ORDER BY combinedtotal DESC 

這隻會返回那些具有匹配petid1和petid2記錄,所以在你的榜樣,ID的1240和995不會顯示。如果要顯示這些記錄,請將聯接更改爲FULL JOIN。

+0

謝謝,我已經解決了這個問題! –

0

您已經有了兩個要合併的輸出。由於這些是兩個獨立的信息,因此您需要在問題中使用這兩個查詢。通過使用union all,您可以將它們組合成一個表格。

SELECT petid1 as petid, COUNT(*) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1 
Union all 
SELECT petid2 as petid, COUNT(*) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2 

此查詢的輸出將

petid | total 
1218 | 20 
9102 | 18 
995 | 10 
1238 | 9 
1217 | 8 
912 | 10 
1218 | 9 
1238 | 8 
1240 | 6 
1217 | 5 

現在,爲了給petid結合起來,你需要做上述查詢到一個子查詢,並通過移動的組外部查詢。

Select petid, count(*) as total 
From(
    SELECT petid1 as petid FROM cdc_padchat WHERE petid1 !=0 
    Union all 
    SELECT petid2 as petid FROM cdc_padchat WHERE petid2 !=0 
) 
GROUP BY petid 
Order by total desc 

這應該會給你你要找的。

+0

我不知道什麼錯誤,但是當我使用這個陳述時,我不能用完結果..... –

+0

聯盟並沒有讓OP能夠比較你答案的前半部分的結果。下半場計數不會增加爲OP請求。 – paqogomez

+0

@paqogomez OP僅指定他想要petid的總數,即id爲1218,total result = 20 + 9 = 29。計數將返回相同的總和,因爲在子查詢中沒有分組,所以我使用了union。如果OP想要從我的答案的前半部分看到輸出結果,那麼他們應該運行該查詢。 – Jenn