使用聚合函数时,如何将 1 列中的空值替换为另一列中的值? - SQL

How can I replace null values in 1 column with the values from another column when working with an aggregate function? - SQL

我在 Stripe 网站上的 Stripe sigma 应用程序中工作,我正在尝试按国家/地区计算收入。当客户填写他们的付款信息时,他们会被要求输入他们的国家,但有些人没有这样做。该列名为 card_country_address。处理付款时,发卡的国家/地区也会记录在名为 card_country.

的列中

在计算收入时,我将金额相加并按 card_country_address 分组。但是,由于客户未填写正确信息而导致出现空值,因此我在 card_address_country 中得到 1 个空白值和未分配的美元金额。因此,我想用 card_country 中的值替换空值并将其包含在计算中。

我读到我可以用 COALESCE 替换空值并且我已经写了一个声明来这样做,但是我不确定如何将它正确地包含到一个完整的声明中。

这是我的:

SELECT COALESCE(card_address_country, card_country)
FROM charges
WHERE card_address_country IS NULL

这似乎正确地替换了空值。我必须按国家/地区计算收入的声明是:

SELECT card_address_country AS "Country", sum(amount) AS "Total Revenue"
FROM charges
WHERE amount_refunded = 0 and paid = true
GROUP BY card_address_country
ORDER BY sum(amount) DESC

这就是我遇到的问题:

12,934,033 美元计算不正确,因为 card_address_country 对于大量交易为空。

我知道有些人可能会想,那就按 card_country 分组吧。但是,此列也包含空值,我仍然需要做同样的事情并从 card_country_address 添加缺少的国家/地区代码。此外,card_address_country 和 card_country 并不总是相同的。我使用 card_address_country 因为我想知道客户从哪里购买的。

如何将带有 COALESCE 的语句包含到主语句中,以便我可以正确分配链接到空地址的金额?这是解决这个问题的正确方法还是有更好的方法来替换和计算值?

看起来GROUP BY COALESCE(card_address_country, card_country)会得到想要的结果集

SELECT COALESCE(card_address_country, card_country) AS "Country", SUM(amount) AS "Total Revenue"
FROM charges
WHERE amount_refunded = 0 and paid = true
GROUP BY COALESCE(card_address_country, card_country)
ORDER BY SUM(amount) DESC