You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中统计两列中各国家的账户总数?

解决PostgreSQL中多列国家的账户统计问题

嘿,这个需求其实很好实现,核心思路就是先把两列里的国家数据合并成一个统一的列表,再做分组统计就行。我给你详细拆解下:

实现方案

我们可以用UNION ALL把country1和country2的非空国家值合并到一个临时结果集里,然后对这个结果集分组计数。这样不管国家出现在哪一列,都会被正确统计到。

对应的SQL语句如下:

SELECT country, COUNT(*) AS account_count
FROM (
    -- 取出country1列的所有非空国家
    SELECT country1 AS country FROM accounts WHERE country1 IS NOT NULL
    -- 用UNION ALL合并country2列的非空国家(不自动去重,保证每个国家实例都被统计)
    UNION ALL
    SELECT country2 AS country FROM accounts WHERE country2 IS NOT NULL
) AS combined_countries
-- 按国家分组统计关联的账户数量
GROUP BY country
-- 可选:按数量降序、国家名称升序排序,让结果更直观
ORDER BY account_count DESC, country;

关键细节说明

  1. UNION ALL的必要性:这里不能用UNION,因为UNION会自动去重,会导致同一个账户里的两个国家被合并,而我们需要的是每个国家在任意一列出现一次,就算关联了一个账户(比如例子里的France在两行各出现一次,要统计成2)。
  2. 过滤NULL值:添加WHERE countryX IS NOT NULL是为了避免把空值当成一个“国家”统计进去,毕竟你的示例数据里存在country2为空的行。

用你的示例数据验证

拿你给出的测试数据:

account_number | country1     | country2
123            | France       | Germany
124            | Switzerland  | France
125            | Germany      | NULL

子查询combined_countries会输出:

France
Germany
Switzerland
France
Germany

外层分组统计后就会得到你期望的结果:

country     | account_count
France      | 2
Germany     | 2
Switzerland | 1

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:42:47