PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql връща 0, ако върнатата стойност е нула

използвайте сливане

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.

Редактиране

Ето пример за COALESCE с вашата заявка:

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

ИМХО COALESCE не трябва да се използва с AVG защото променя стойността. NULL означава неизвестно и нищо друго. Не е като да го използвате в SUM . В този пример, ако заменим AVG от SUM , резултатът не е изкривен. Добавянето на 0 към сумата не вреди на никого, но ако изчислите средна стойност с 0 за неизвестните стойности, вие не получавате истинската средна стойност.

В такъв случай бих добавил price IS NOT NULL в WHERE клауза за избягване на тези неизвестни стойности.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Писане на файл с помощта на множество нишки

  2. django.db.utils.OperationalError Не можа да се свърже със сървъра

  3. Как да активирате SSL в PostgreSQL

  4. Динамичен (базиран на колони) интервал

  5. Не може да се свърже с postgres от отдалечен хост