2011-11-14 62 views
4

我希望能夠從包含兩個整數值的元組中創建直方圖。 使用postgresql。如何計數重複內部postgres行?

這是查詢:

SELECT temp.ad_id, temp.distance as hits FROM ( 
'UNION ALL .join(cupound_query)' # python 
) as temp GROUP BY temp.ad_id,temp.distance 

編輯:最好的例子是什麼我想

此輸入:

(51, 5) 
(51, 0) 
(51, 3) 
(51, 0) 
(88, 2) 
(88, 2) 
(88, 2) 
(84, 1) 
(81, 9) 

是:

(88,2) : 3 
(51,0) : 2 
(51,3) : 1 
(51,5) : 1 
(84,1) : 1 
(81,9) : 1 

如何創建這些值的直方圖? 換句話說,我怎樣才能算出 連續有多少次?

感謝

+1

你如何定義複製?它看起來像你當前的數據集沒有重複,這使它成爲你的問題不好的代表性樣本。你是否想過計算50次的命中次數,比如400-450,450-500,500-550等?如果有,請澄清。 – mellamokb

+0

重複的意義上,雙方完全相同的數字。是的,在我給出的樣本中,每個元素都有COUNT = 1 – fabrizioM

回答

12

您的問題留下了解釋空間。此測試用例顯示2個嵌套步驟:

CREATE TEMP TABLE x (ad_id int, distance int); 
INSERT INTO x VALUES 
(510, 0),(956, 3),(823, 3),(880, 2) 
,(523, 3),(467, 0),(843, 1),(816, 9) 
,(533, 4),(721, 7),(288, 3),(900, 3) 
,(526, 9),(750, 7),(302, 8),(463, 6) 
,(742, 8),(804, 2),(62, 7),(880, 2) 
,(523, 3),(467, 0),(843, 1),(816, 9) 
,(533, 4),(721, 7),(288, 3),(900, 3) 
,(526, 9),(750, 7),(302, 8),(816, 9) 
,(533, 4),(721, 7),(288, 3),(900, 3) 
,(533, 4),(721, 7),(288, 3),(396, 5); 

每個值有多少重複?

SELECT ad_id, count(*) AS ct FROM x GROUP BY 1; 

結果:

ad_id | ct 
-------+---- 
62  | 1 
288 | 4 
302 | 2 
396 | 1 
... 

閱讀:ad_id 62存在1X,ad_id 288存在4倍,...


「我怎麼能算一排多少次有重複?」

SELECT ct 
     ,COUNT (*) AS ct_ct 
FROM (SELECT ad_id, COUNT (*) AS ct FROM x GROUP BY 1) a 
GROUP BY 1 
ORDER BY 1; 

結果:

ct | ct_ct 
----+--- 
1 | 8 
2 | 7 
3 | 2 
4 | 3 

閱讀:8次出現 「ad_id是獨一無二的」,7次出現 「2行與同ad_id」 的,...

2

只需添加count(*)到您的選擇:

SELECT temp.ad_id, temp.distance as hits, count(*) 
.... 
0

下面是一個使用Postgres的一個教程,我直接在SQL如何生成柱狀圖中寫道:

Simple Histograms in SQL

我認爲你可以很容易地將這個例子調整到你的表結構。