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

PostgreSQL में फ़ील्ड द्वारा ऑर्डर के आधार पर दूसरा उच्चतम से निम्नतम मान रिकॉर्ड कैसे प्राप्त करें

इसे करने के कई तरीके हैं, लेकिन अगर आपको विंडो फ़ंक्शंस के साथ खेलने का मन करता है तो आप RANK() कर सकते हैं या DENSE_RANK() आईडी द्वारा वज़न और बाहरी क्वेरी में पहली रैंक को खत्म करें:

WITH cte AS (
  SELECT id, ('{user,'||index-1||'}')::text[] as json_path, (value->'user_weight')::text::numeric AS weight
  FROM user_table, jsonb_array_elements(json_field->'user')
  WITH ordinality arr(value, index) 
  WHERE arr.value->>'user_name' IN ('Devang', 'Meet') 
  ORDER BY id, value->'user_weight' DESC
) 
SELECT * FROM (
  SELECT cte.*, 
    RANK() OVER (PARTITION BY id ORDER BY id,weight DESC
                 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS r
  FROM cte) j
WHERE r > 1;

डेमो:db<>fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विंडोज़ पर PHP और PostgreSQL कॉन्फ़िगर करें

  2. pqxx::result::tuple घोषित नहीं किया गया है (C++ के लिए PostgreSQL लाइब्रेरी)

  3. डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है, CakePHP

  4. PostgreSQL में xml टैग का मान निकालना

  5. PostgreSQl फ़ंक्शन कई गतिशील परिणाम सेट लौटाता है