sử dụng liên kết
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.
Chỉnh sửa
Đây là một ví dụ về COALESCE
với truy vấn của bạn:
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
không nên sử dụng với AVG
vì nó sửa đổi giá trị. NULL
có nghĩa là không biết và không có gì khác. Nó không giống như sử dụng nó trong SUM
. Trong ví dụ này, nếu chúng ta thay thế AVG
bởi SUM
, kết quả là không bị bóp méo. Việc thêm 0 vào một tổng không gây hại cho bất kỳ ai nhưng tính toán trung bình với 0 cho các giá trị không xác định, bạn sẽ không nhận được giá trị trung bình thực.
Trong trường hợp đó, tôi sẽ thêm price IS NOT NULL
trong WHERE
mệnh đề để tránh những giá trị không xác định này.