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

postgresql mengembalikan 0 jika nilai yang dikembalikan adalah nol

gunakan penggabungan

COALESCE(value [, ...])
The COALESCE function returns the first of its arguments that is not null.  
Null is returned only if all arguments are null. It is often
used to substitute a default value for null values when data is
retrieved for display.

Sunting

Berikut ini contoh COALESCE dengan pertanyaan Anda:

SELECT AVG( price )
FROM(
      SELECT *, cume_dist() OVER ( ORDER BY price DESC ) FROM web_price_scan
      WHERE listing_Type = 'AARM'
        AND u_kbalikepartnumbers_id = 1000307
        AND ( EXTRACT( DAY FROM ( NOW() - dateEnded ) ) ) * 24 < 48
        AND COALESCE( price, 0 ) > ( SELECT AVG( COALESCE( price, 0 ) )* 0.50
                                     FROM ( SELECT *, cume_dist() OVER ( ORDER BY price DESC )
                                           FROM web_price_scan
                                           WHERE listing_Type='AARM'
                                             AND u_kbalikepartnumbers_id = 1000307
                                             AND ( EXTRACT( DAY FROM ( NOW() - dateEnded ) ) ) * 24 < 48
                                         ) g
                                    WHERE cume_dist < 0.50
                                  )
        AND COALESCE( price, 0 ) < ( SELECT AVG( COALESCE( price, 0 ) ) *2
                                     FROM( SELECT *, cume_dist() OVER ( ORDER BY price desc )
                                           FROM web_price_scan
                                           WHERE listing_Type='AARM'
                                             AND u_kbalikepartnumbers_id = 1000307
                                             AND ( EXTRACT( DAY FROM ( NOW() - dateEnded ) ) ) * 24 < 48
                                         ) d
                                     WHERE cume_dist < 0.50)
     )s
HAVING COUNT(*) > 5

IMHO COALESCE tidak boleh digunakan dengan AVG karena itu mengubah nilai. NULL berarti tidak diketahui dan tidak ada yang lain. Ini tidak seperti menggunakannya di SUM . Dalam contoh ini, jika kita mengganti AVG dengan SUM , hasilnya tidak terdistorsi. Menambahkan 0 ke jumlah tidak merugikan siapa pun, tetapi menghitung rata-rata dengan 0 untuk nilai yang tidak diketahui, Anda tidak mendapatkan rata-rata yang sebenarnya.

Dalam hal ini, saya akan menambahkan price IS NOT NULL di WHERE klausa untuk menghindari nilai yang tidak diketahui ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - bagaimana cara mengembalikan baris dengan 0 hitungan untuk data yang hilang?

  2. Cadangkan PostgreSQL Menggunakan pg_dump dan pg_dumpall

  3. Beberapa area peningkatan di PostgreSQL 9.4

  4. Bagaimana cara menggunakan ANY alih-alih IN dalam klausa WHERE dengan Rails?

  5. PostgreSQL meneruskan data dari CTE rekursif ke fungsi