PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेएसक्यूएल में एग्रीगेटिंग (एक्स, वाई) समन्वय बिंदु बादल

अक्सर अनदेखी किए गए अंतर्निहित फ़ंक्शन का उपयोग करें width_bucket() आपके एकत्रीकरण के संयोजन में:

यदि आपके निर्देशांक 0 से 2000 तक चलते हैं और आप 5 से एकल बिंदुओं के वर्गों के भीतर सब कुछ समेकित करना चाहते हैं, तो मैं इस तरह से 10 (5*2) का ग्रिड तैयार करूंगा:

SELECT device_id
     , width_bucket(pos_x, 0, 2000, 2000/10) * 10 AS pos_x
     , width_bucket(pos_y, 0, 2000, 2000/10) * 10 AS pos_y
     , count(*) AS ct -- or any other aggregate
FROM   tbl
GROUP  BY 1,2,3
ORDER  BY 1,2,3;

त्रुटि को कम करने के लिए आप GROUP BY कर सकते हैं ग्रिड जैसा दिखाया गया है, लेकिन वास्तविक औसत निर्देशांक सहेजें:

SELECT device_id
     , avg(pos_x)::int AS pos_x   -- save actual averages to minimize error
     , avg(pos_y)::int AS pos_y   -- cast if you need to
     , count(*)        AS ct      -- or any other aggregate
FROM   tbl
GROUP  BY
       device_id
     , width_bucket(pos_x, 0, 2000, 2000/10) * 10  -- aggregate by grid
     , width_bucket(pos_y, 0, 2000, 2000/10) * 10
ORDER  BY 1,2,3;

sqlfiddle दोनों को साथ-साथ प्रदर्शित करता है।

खैर, यह विशेष मामला आसान हो सकता है:

...
GROUP  BY
       device_id
     , (pos_x / 10) * 10          -- truncates last digit of an integer
     , (pos_y / 10) * 10
...

लेकिन ऐसा सिर्फ इसलिए है क्योंकि 10 . का डेमो ग्रिड आकार आसानी से दशमलव प्रणाली से मेल खाता है। 17 . के ग्रिड आकार के साथ भी ऐसा ही करें या कुछ ...

टाइमस्टैम्प तक विस्तृत करें

आप date . को कवर करने के लिए इस दृष्टिकोण का विस्तार कर सकते हैं और timestamp एक्सट्रेक्ट() के साथ उन्हें यूनिक्स युग ('1970-1-1' के बाद से सेकंड की संख्या) में परिवर्तित करके मान।

SELECT extract(epoch FROM '2012-10-01 21:06:38+02'::timestamptz);

जब आप कर लें, तो परिणाम को वापस timestamp with time zone . में बदलें :

SELECT timestamptz 'epoch' + 1349118398 * interval '1s';

या बस to_timestamp() :

SELECT to_timestamp(1349118398);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे जांचें कि PostgreSQL ऐरे में मूल्य है या नहीं

  2. पोस्टग्रेज़ डेटा प्रकार कास्ट

  3. बिना डुप्लीकेट के लेफ्ट जॉइन वाली चार टेबल्स में शामिल हों

  4. क्रम में अनुक्रम पीढ़ी

  5. समय क्षेत्र के साथ डेटा प्रकार टाइमस्टैम्प में समय क्षेत्र भंडारण