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

SQL如何在满足rank=1且Type=a时获取对应TelNO的全部分组数据

问题分析

你原来编写的SQL存在两个核心问题:

  • WHERE子句直接过滤掉了不满足Type='a' and rank=1的行,自然无法保留同一TelNO下的其他记录
  • 非聚合场景下直接使用GROUP BY只会返回每个分组的首条或聚合结果,无法返回分组内全部行
解决方案

方案1:使用窗口函数(适配你想用partition的需求)

用开窗函数给每个TelNO分组标记是否存在符合条件的记录,再过滤标记为符合要求的全部行即可:

SELECT TelNO, Type, `rank`, `date`
FROM (
    SELECT *,
        MAX(CASE WHEN Type='a' AND `rank`=1 THEN 1 ELSE 0 END) OVER (PARTITION BY TelNO) AS has_valid_record
    FROM 你的表名
) t
WHERE has_valid_record = 1

逻辑说明:对每个TelNO分组计算,只要分组内有任意一行满足Type='a'且rank=1,整个分组的has_valid_record都会被标记为1,外层过滤就能拿到该分组的全部行。

方案2:使用IN子查询(写法更简单易读)

先查出所有符合条件的TelNO,再过滤出这些TelNO的全部行:

SELECT *
FROM 你的表名
WHERE TelNO IN (
    SELECT DISTINCT TelNO
    FROM 你的表名
    WHERE Type='a' AND `rank`=1
)
注意事项
  • 示例中rank和date都是SQL的保留关键字,作为字段名使用时建议加反引号转义,避免语法错误
  • Type是字符串类型,判断值的时候要加单引号写Type='a',不能直接写Type=a

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:24:02