पोस्टग्रेज . में , width_bucket()
केवल वही चीज है जिसकी आप तलाश कर रहे हैं - किसी भी संख्या में पंक्तियों को दानेदार बनाने के लिए (N
) अंतर्निहित तालिका में किसी दिए गए (अधिमानतः छोटा .) में ) डेटा बिंदुओं की संख्या (n
) वजन को दर्शाने के लिए आप प्रत्येक डेटा बिंदु में योगदान देने वाली पंक्तियों की संख्या जोड़ सकते हैं।
एक छोटी सी बाधा:width_bucket()
. का प्रकार हमें double precision
पर कार्य करने की आवश्यकता है या numeric
नंबर, timestamp
. पर नहीं और अन्य। बस युग निकालें साथ काम करने के लिए।
इस तालिका परिभाषा और वर्तमान पोस्टग्रेज संस्करण को मानते हुए:
CREATE TABLE tbl (
tbl_id serial PRIMARY KEY
, value numeric NOT NULL
, created_at timestamptz NOT NULL
);
प्रश्न:
SELECT width_bucket(extract(epoch FROM t.created_at), x.min_epoch, x.max_epoch, 400) AS pix
, round(avg(t.value), 2) AS avg -- round is optional
, count(*) AS weight
FROM big t
CROSS JOIN (SELECT extract(epoch FROM min(created_at)) AS min_epoch
, extract(epoch FROM max(created_at)) AS max_epoch FROM big) x
GROUP BY 1
ORDER BY 1;
परिणाम:
pix | avg | weight
----+--------+------
1 | 152.58 | 7
2 | 155.16 | 8
3 | 148.89 | 7
...
400 पंक्तियाँ लौटाता है - जब तक कि N
. न हो <n
, जिस स्थिति में आपको N
. मिलता है पंक्तियाँ।
संबंधित: