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

SQL查询需求:筛选基准货币为USD且含其他货币的账户

嘿,针对你这个筛选需求,我整理了几种实用的SQL实现方案,都是日常工作里常用的思路,你可以根据自己的表结构和需求选合适的:

方法1:使用EXISTS子查询精准匹配

这个方法直接检查每个账户是否存在非USD的货币记录,同时确保基准货币是USD,逻辑直观易懂:

SELECT DISTINCT t.account_id, t.base_currency, t.currency
FROM your_table t
WHERE t.base_currency = 'USD'
  AND EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.account_id = t.account_id
      AND t2.currency != 'USD'
  );

解释:EXISTS子查询用来确认同一个账户下存在其他货币的记录,DISTINCT是为了避免重复输出同一账户的多条记录(如果一个账户有多条非USD货币的记录)。

方法2:使用GROUP BY + HAVING分组筛选

如果只需要获取符合条件的账户ID和基准货币信息,这个方法更简洁高效:

SELECT account_id, base_currency
FROM your_table
GROUP BY account_id, base_currency
HAVING base_currency = 'USD'
   AND MAX(CASE WHEN currency != 'USD' THEN 1 ELSE 0 END) = 1;

或者另一种等价写法,通过统计非USD货币的种类数来判断:

SELECT account_id, base_currency
FROM your_table
GROUP BY account_id, base_currency
HAVING base_currency = 'USD'
   AND COUNT(DISTINCT CASE WHEN currency != 'USD' THEN currency END) > 0;

解释:按账户和基准货币分组后,用CASE标记非USD的记录,通过MAX或COUNT判断该账户是否存在其他货币,同时锁定基准货币为USD的账户。

方法3:使用窗口函数保留全量字段

如果需要保留原表的所有列数据,窗口函数可以帮你在每条记录上标记该账户是否符合条件,再进行筛选:

WITH account_flags AS (
  SELECT *,
         -- 统计该账户持有的货币种类总数
         COUNT(DISTINCT currency) OVER (PARTITION BY account_id) AS total_currency_types,
         -- 标记该账户是否持有非USD货币
         MAX(CASE WHEN currency != 'USD' THEN 1 ELSE 0 END) OVER (PARTITION BY account_id) AS has_other_currency
  FROM your_table
)
SELECT *
FROM account_flags
WHERE base_currency = 'USD'
  AND has_other_currency = 1;

解释:先通过窗口函数给每个账户打上标记,再筛选出基准货币为USD且持有其他货币的记录,这样可以完整保留原表的所有字段信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:37