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

फ़ील्ड मानों की तरह ग्रुप बाय या काउंट - UNPIVOT?

मैं एक समाधान के साथ आया होगा:

SELECT id
      ,l - length(replace(t, 'P', '')) AS nr_p
      ,l - length(replace(t, 'F', '')) AS nr_f
      ,l - length(replace(t, 'I', '')) AS nr_i
FROM   (SELECT id, test::text AS t, length(test::text) AS l  FROM test) t

ट्रिक इस तरह काम करती है:

  • पंक्ति प्रकार को उसके टेक्स्ट प्रस्तुतिकरण में रूपांतरित करें।
  • वर्ण-लंबाई मापें।
  • उस वर्ण को बदलें जिसे आप गिनना चाहते हैं और लंबाई में परिवर्तन को मापें।
  • बार-बार उपयोग के लिए उप-चयन में मूल पंक्ति की लंबाई की गणना करें।

इसके लिए आवश्यक है कि P, F, I पंक्ति में कहीं और मौजूद नहीं हैं। हस्तक्षेप करने वाले किसी भी अन्य कॉलम को बाहर करने के लिए उप-चयन का उपयोग करें।

8.4 - 9.1 में परीक्षण किया गया। आजकल कोई भी PostgreSQL 7.4 का उपयोग नहीं करता है, आपको स्वयं का परीक्षण करना होगा। मैं केवल बुनियादी कार्यों का उपयोग करता हूं, लेकिन मुझे यकीन नहीं है कि पंक्ति प्रकार को पाठ में डालना 7.4 में संभव है। यदि वह काम नहीं करता है, तो आपको सभी परीक्षण-स्तंभों को एक बार हाथ से जोड़ना होगा:

SELECT id
      ,length(t) - length(replace(t, 'P', '')) AS nr_p
      ,length(t) - length(replace(t, 'F', '')) AS nr_f
      ,length(t) - length(replace(t, 'I', '')) AS nr_i
FROM   (SELECT id, test1||test2||test3||test4 AS t FROM test) t

इसके लिए जरूरी है कि सभी कॉलम NOT NULL हों ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉम्प्लेक्स लेफ्ट आउटर Oracle में जुड़ता है, PostgreSQL में परिवर्तित होता है

  2. MySQL SET डेटा प्रकार को Postgres में बदलें

  3. एकल होस्ट पर एकाधिक PostgreSQL इंस्टेंस चलाना

  4. PostgreSQL एक ही कनेक्शन पर कई लेनदेन

  5. Persistence.createEntityManagerFactory() को वापस आने में बहुत समय लगता है