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.