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

如何筛选满足指定分组求和条件的SQL表所有行?

按日期筛选符合条件的行(基于指定name的cost总和)

表结构

原表包含以下字段:

day (date)
name (string)
description (string)
cost (float)

需求描述

选取所有行,要求满足:按day分组后,该分组中name = 'x'的cost总和大于0。

举例:若1月18日name = 'x'的cost总和为15,则选取该日所有行(包括name != 'x'的行);若1月17日name = 'x'的cost总和为0,则不选取该日任何行。

解决方案

你提到的窗口函数思路是可行的,不需要在partition by里加where,而是通过条件聚合来实现指定name的求和,下面提供两种实用方案:

方案1:窗口函数+条件聚合

在窗口函数的sum()中用case语句过滤出name='x'的记录再求和,外层筛选总和大于0的行:

SELECT *
FROM (
    SELECT 
        *,
        -- 只计算当前日期分组中name=x的cost总和
        SUM(CASE WHEN name = 'x' THEN cost ELSE 0 END) OVER (PARTITION BY day) AS x_daily_total
    FROM your_table_name
) temp
WHERE x_daily_total > 0;

方案2:先筛选合格日期再关联

先找出所有符合条件的日期,再关联原表获取这些日期的所有行,适合数据量较大的场景:

SELECT t.*
FROM your_table_name t
INNER JOIN (
    -- 先筛选出name=x的cost总和>0的日期
    SELECT day
    FROM your_table_name
    WHERE name = 'x'
    GROUP BY day
    HAVING SUM(cost) > 0
) valid_days ON t.day = valid_days.day;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:38:16