PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql zwraca 0, jeśli zwracana wartość ma wartość null

użyj połączenia

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.

Edytuj

Oto przykład COALESCE z Twoim zapytaniem:

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 nie powinien być używany z AVG ponieważ modyfikuje wartość. NULL oznacza nieznane i nic więcej. To nie jest jak używanie go w SUM . W tym przykładzie, jeśli zastąpimy AVG przez SUM , wynik nie jest zniekształcony. Dodanie 0 do sumy nikomu nie zaszkodzi, ale obliczając średnią z 0 dla nieznanych wartości, nie uzyskasz prawdziwej średniej.

W takim przypadku dodałbym price IS NOT NULL w WHERE klauzulę, aby uniknąć tych nieznanych wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY w klauzuli UPDATE FROM

  2. Ruby 'pg' klejnot łączący się z niewłaściwą kopią libpq.5.dylib (na OSX)

  3. Pula połączeń PostgreSQL z PgBouncer

  4. Zrozumienie typów i funkcji dat PostgreSQL (przykłady)

  5. Jak porównać dwa schematy w PostgreSQL