utiliser la fusion
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.
Modifier
Voici un exemple de COALESCE
avec votre requête :
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
À mon humble avis COALESCE
ne doit pas être utilisé avec AVG
car il modifie la valeur. NULL
signifie inconnu et rien d'autre. Ce n'est pas comme l'utiliser dans SUM
. Dans cet exemple, si nous remplaçons AVG
par SUM
, le résultat n'est pas faussé. Ajouter 0 à une somme ne fait de mal à personne mais en calculant une moyenne avec 0 pour les valeurs inconnues, vous n'obtenez pas la vraie moyenne.
Dans ce cas, j'ajouterais price IS NOT NULL
dans WHERE
clause pour éviter ces valeurs inconnues.