PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mendapatkan rekor nilai tertinggi kedua ke terendah berdasarkan urutan berdasarkan bidang di PostgreSQL

Ada banyak cara untuk melakukannya, tetapi jika Anda ingin bermain dengan fungsi jendela, Anda bisa RANK() atau DENSE_RANK() bobot dengan id dan hilangkan peringkat pertama dalam kueri luar:

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;

Demo: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. Untuk mengabaikan kunci duplikat selama 'salin dari' di postgresql

  2. Django berbeda tidak berfungsi

  3. Panggil fungsi pengembalian set dengan argumen array beberapa kali

  4. Menghasilkan kolom secara dinamis di PostgreSQL

  5. Bangun gambar hub buruh pelabuhan keycloak di openshift dari perintah aplikasi baru