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

如何在GROUP BY+HAVING单字段过滤时展示用户表其他字段?

解决方法

首先纠正你SQL里的拼写错误:uder_identification_code应该是user_identification_code,这个笔误可能会影响查询结果。

你之前的问题出在:GROUP BY后直接SELECT非分组、非聚合的字段,或者在HAVING里写lastname这类无意义条件,数据库无法识别该如何处理这些字段。要获取用户的其他字段,不能直接在原GROUP BY查询里添加,推荐两种可行思路:

方法一:子查询关联原表

先筛选出符合条件且重复的信用卡号,再关联原表拿到完整用户信息:

SELECT u.*
FROM user u
JOIN (
    -- 先找出重复的目标信用卡号
    SELECT creditcard
    FROM user
    WHERE preferred_card = '1'
      AND user_identification_code = 'creditcard'
    GROUP BY creditcard
    HAVING COUNT(1) > 1
) dup_cards ON u.creditcard = dup_cards.creditcard
-- 再次过滤条件,确保只取目标记录
WHERE u.preferred_card = '1'
  AND u.user_identification_code = 'creditcard';

方法二:窗口函数(适配MySQL8+、PostgreSQL等支持窗口函数的数据库)

用窗口函数按信用卡号统计出现次数,再筛选出次数大于1的记录,直接获取所有字段:

SELECT *
FROM (
    SELECT *,
           -- 按creditcard分组统计该卡的重复次数
           COUNT(1) OVER (PARTITION BY creditcard) AS card_repeat_count
    FROM user
    WHERE preferred_card = '1'
      AND user_identification_code = 'creditcard'
) temp
WHERE temp.card_repeat_count > 1;

这两种方法都能帮你获取所有拥有多张首选信用卡的用户完整信息,方便后续数据清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:23:18