sql >> Databáze >  >> RDS >> PostgreSQL

postgresql vrátí 0, pokud je vrácená hodnota null

použijte srůst

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.

Upravit

Zde je příklad COALESCE s vaším dotazem:

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 by neměl být používán s AVG protože mění hodnotu. NULL znamená neznámé a nic jiného. Není to jako používat to v SUM . V tomto příkladu, pokud nahradíme AVG podle SUM , výsledek není zkreslený. Přidání 0 k součtu nikoho nezraní, ale vypočítáním průměru s 0 pro neznámé hodnoty nedostanete skutečný průměr.

V tom případě bych přidal price IS NOT NULL v WHERE klauzule, aby se zabránilo těmto neznámým hodnotám.



  1. Jak najít umístění datových souborů a souborů protokolu na serveru SQL Server

  2. Jak přežít audit Oracle

  3. Přidejte data do databáze sqlite pouze jednou a čtěte vícekrát

  4. MySQL:Povolte LOAD DATA LOCAL INFILE