2011-12-16 13 views
6

Başımı bir veya daha fazla seçenek parametresini kabul eden PostgreSQL (8.4 veya 9.1) kümeleri oluşturmaya çalışıyorum.Çoklu Parametrelerle PostgreSQL Agregaları

Örnek, 0 <= p <= 1 ile p-th miktarını hesaplamak için PL/R uzantısını oluşturacaktır. Bu quantile(x,p) gibi bir şey, bir sorgulamanın parçası olarak istiyoruz:

select category,quantile(x,0.25) 
from TABLE 
group by category 
order by category; 

TABLE (category:text, x:float).

Öneriler?

cevap

5

Umarım bu örnek yardımcı olacaktır. Akümülatör, toplama-argümanları alan bir fonksiyona ihtiyaç duyar ve yeni akümülatör değerini döndürür. Aşağıdaki kodla oynayın ve size her şeyin nasıl bir araya geldiği konusunda bir fikir vermelisiniz. Size şöyle bir şey vermelidir

BEGIN; 

CREATE FUNCTION sum_product_fn(int,int,int) RETURNS int AS $$ 
    SELECT $1 + ($2 * $3); 
$$ LANGUAGE SQL;   

CREATE AGGREGATE sum_product(int, int) (
    sfunc = sum_product_fn, 
    stype = int, 
    initcond = 0 
); 

SELECT 
    sum(i) AS one,  
    sum_product(i, 2) AS double, 
    sum_product(i,3) AS triple 
FROM generate_series(1,3) i; 

ROLLBACK;  

:

one | double | triple 
-----+--------+-------- 
    6 |  12 |  18 
3

Bu En NTILE() fonksiyonu ve pencereleme daha bulabilirsiniz

-- To calculate flexible quantile ranges in postgresql, for example to calculate n equal 
-- frequency buckets for your data for use in a visualisation (such as binning for a 
-- choropleth map), you can use the following SQL: 

-- this functions returns 6 equal frequency bucket ranges for my_column. 
SELECT ntile, avg(my_column) AS avgAmount, max(my_column) AS maxAmount, min(my_column) AS  minAmount 
FROM (SELECT my_column, ntile(6) OVER (ORDER BY my_column) AS ntile FROM my_table) x 
GROUP BY ntile ORDER BY ntile 

NTILE pencere açma fonksiyonuna elde edilebilir http://database-programmer.blogspot.com/2010/11/really-cool-ntile-window-function.html

+0

Harika! teşekkür ederim! – alfonx

+0

Downvote, çünkü bu, dörtlü aralıkların hesaplanması için kesinlikle yararlı olsa da, soru toplam işlevler oluşturmaya ilişkindir. –