回答

收藏

若返回值为null,则PostgreSQL返回0

技术问答 技术问答 473 人阅读 | 0 人回复 | 2023-09-11

我有一个查询返回avg(price)  E2 z6 L/ A5 M
    select avg(price)  from(       select *,cume_dist() OVER (ORDER BY price desc) from web_price_scan      where listing_Type='AARM          and u_kbalikepartnumbers_id =   and (EXTRACT(Day FROM (Now()-dateEnded)))*24 ( select avg(price)* 0.505050                                                                                                                                                                                                                                   from(select *,cume_dist() OVER (ORDER BY price desc)                         from web_price_scan                         where listing_Type='AARM                             and u_kbalikepartnumbers_id =                      and (EXTRACT(Day FROM (Now()-dateEnded)))*24  5如果没有可用值,如何返回0?8 g4 T  ~5 n/ d, b, R/ H/ G
                                                                9 W& g$ I  M. V) D; k  ]
    解决方案:                                                               
+ a# L! X4 y' Z. D' z8 z' X# W                                                                使用合并
$ ^+ p/ S. m5 \4 n9 }COALESCE(value [,...])The COALESCE function returns the first of its arguments that is notnull.5 X: I  Y2 C+ l+ B/ j  F
                Null is returned only if all arguments are null. It is often
3 l9 D* m8 k: ^                used to substitute a default value for null values when data is, a1 y2 e- ?0 ?
                retrieved for display.* J; b5 z- O* N, u7 Y
编辑! V1 n% j& x' m, _; _  V
这是COALESCE查询示例:
2 p+ y& f  S- tSELECT AVG( price )FROM(       SELECT *,cume_dist() OVER ( ORDER BY price DESC ) FROM web_price_scan      WHERE listing_Type = 'AARM          AND u_kbalikepartnumbers_id =   AND ( EXTRACT( DAY FROM ( NOW() - dateEnded ) ) * 24  ( SELECT AVG( COALESCE( price,0 ) )* 0.505050                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  FROM ( SELECT *,cume_dist() OVER ( ORDER BY price DESC )                                                                                                                             FROM web_price_scan                                           WHERE listing_Type='AARM                                               AND u_kbalikepartnumbers_id =                                        AND ( EXTRACT( DAY FROM ( NOW() - dateEnded ) ) * 24  5IMHOCOALESCE不应与之一起使用,AVG因为它会修改值。NULL这意味着未知,没有别的。这不像在里面用。SUM。在这个例子中,如果我们替换它,AVG为SUM,结果不会扭曲。总和加0不会伤害任何人,但当未知值计算为0时,你不会得到真正的平均值。* m, C! y  ]0 M5 j  d/ e8 f
在那种情况下,我将添加price IS NOT NULLinWHERE避免这些未知值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则