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

如何筛选仅满足tinyint=1条件的Table.Number对应数据行?

筛选全组tinyint均为1的数据行

没问题,我完全get到你的需求了:要找出所有属于「该分组下所有行的tinyint字段都等于1」的Table.Number分组,然后把这些分组里的所有数据行都筛选出来——就像你举的例子,只要1112和1114分组里每一行的tinyint都是1,就把这两个组的所有行都保留下来。

下面给你两种适配大多数关系型数据库(比如MySQL、PostgreSQL、SQL Server等)的常用实现方案:

方法一:分组聚合+关联查询

这种方法先通过子查询锁定所有符合条件的分组(Table.Number),再关联原表取出对应行:

SELECT t.*
FROM your_table t
INNER JOIN (
    -- 筛选出所有分组内tinyint全为1的Number
    SELECT Number
    FROM your_table
    GROUP BY Number
    -- 聚合判断:分组内最大和最小tinyint都是1,说明组内没有其他值
    HAVING MAX(tinyint) = 1 AND MIN(tinyint) = 1
    -- 如果tinyint字段可能存在NULL值,需要额外加这一行确保分组内没有空值
    -- AND COUNT(tinyint) = COUNT(*)
) AS valid_groups ON t.Number = valid_groups.Number;

方法二:窗口函数标记筛选

用窗口函数给每一行标记所在分组的tinyint极值,再直接筛选符合条件的行:

SELECT *
FROM (
    SELECT *,
           -- 计算当前Number分组的tinyint最大值和最小值
           MAX(tinyint) OVER (PARTITION BY Number) AS max_tinyint,
           MIN(tinyint) OVER (PARTITION BY Number) AS min_tinyint
    FROM your_table
) AS sub_query
-- 只保留分组内全为1的行
WHERE max_tinyint = 1 AND min_tinyint = 1;

额外小技巧

如果你的tinyint字段只有0和1两种取值,还可以用更直观的逻辑判断分组内没有不符合条件的行:
把方法一子查询里的HAVING子句换成:

HAVING SUM(CASE WHEN tinyint != 1 THEN 1 ELSE 0 END) = 0

这个逻辑是统计分组内tinyint不等于1的行数,等于0就说明整个分组全是1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:34:36