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

求正确SQL查询:找出对应双指标存在多值的账号

找出存在多组指标的账号

你的需求是筛选出Accounts表中,同一个acct_nbr对应多个不同的(Acct_Indicator1, Acct_Indicator2)组合的账号及对应指标值。原查询仅做了分组排序,没有完成筛选逻辑,以下是两种正确的实现方式:

方法一:先筛选账号再关联(兼容多数数据库)

SELECT a.acct_nbr, a.Acct_Indicator1, a.Acct_Indicator2
FROM Accounts a
INNER JOIN (
    -- 统计每个账号的唯一指标组合数,筛选出组合数>1的账号
    SELECT acct_nbr
    FROM Accounts
    GROUP BY acct_nbr
    -- 用分隔符拼接两个指标,确保不同组合被正确计数;若指标含|可换其他分隔符
    HAVING COUNT(DISTINCT CONCAT(Acct_Indicator1, '|', Acct_Indicator2)) > 1
) b ON a.acct_nbr = b.acct_nbr
ORDER BY a.acct_nbr;

方法二:使用窗口函数(适用于支持窗口函数的数据库,如MySQL 8+、PostgreSQL、SQL Server)

SELECT acct_nbr, Acct_Indicator1, Acct_Indicator2
FROM (
    SELECT 
        acct_nbr, 
        Acct_Indicator1, 
        Acct_Indicator2,
        -- 按账号分组,统计该账号下的唯一指标组合数
        COUNT(DISTINCT CONCAT(Acct_Indicator1, '|', Acct_Indicator2)) OVER (PARTITION BY acct_nbr) AS combo_count
    FROM Accounts
) t
-- 筛选出组合数>1的记录
WHERE combo_count > 1
ORDER BY acct_nbr;

简化写法(仅PostgreSQL支持)

PostgreSQL允许直接对多列使用DISTINCT COUNT,无需拼接:

SELECT a.acct_nbr, a.Acct_Indicator1, a.Acct_Indicator2
FROM Accounts a
INNER JOIN (
    SELECT acct_nbr
    FROM Accounts
    GROUP BY acct_nbr
    HAVING COUNT(DISTINCT (Acct_Indicator1, Acct_Indicator2)) > 1
) b ON a.acct_nbr = b.acct_nbr
ORDER BY a.acct_nbr;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:00:15