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

如何通过SELECT查询使表格总计为180?含Cat列等条件说明

问题1:如何编写SELECT查询语句,使表格数据总计值达到180?

咱们先明确下需求哈——你说的“总计值达到180”,大概率是两种场景之一:要么是从现有数据里筛选出若干行,让它们的某列总和刚好等于180;要么是不管实际数据总和是多少,让查询结果里显示的总计行固定为180。我都给你写对应的实现:

场景1:筛选行组合,让某列总和恰好为180

这属于SQL里的子集和问题,适合用递归CTE实现(支持CTE的数据库比如MySQL 8+、PostgreSQL、SQL Server都能用)。假设你的表叫data_table,有id(唯一标识行)和amount(用来求和的列):

WITH RECURSIVE subset_sums AS (
    SELECT 
        id, 
        amount, 
        amount AS total_sum,
        CAST(id AS VARCHAR(1000)) AS selected_ids
    FROM data_table
    WHERE amount <= 180  -- 先排除单个值就超过180的行
    UNION ALL
    SELECT 
        dt.id, 
        dt.amount, 
        ss.total_sum + dt.amount,
        CONCAT(ss.selected_ids, ',', dt.id)
    FROM subset_sums ss
    JOIN data_table dt ON dt.id > ss.id  -- 避免重复选同一行,防止组合重复
    WHERE ss.total_sum + dt.amount <= 180
)
SELECT selected_ids AS 选中的行ID, total_sum AS 总和
FROM subset_sums
WHERE total_sum = 180;

这个查询会找出所有行的组合,它们的amount加起来刚好是180,同时返回选中的行ID列表和总和。

场景2:强制查询结果的总计行显示为180

如果是做报表需要固定显示总计为180,不管前面行的实际总和,直接用UNION ALL追加一行硬编码的总计即可:

SELECT 
    列1,
    列2,
    amount AS 数值
FROM your_table
-- 这里可以加其他筛选条件,比如WHERE ...
UNION ALL
SELECT 
    '总计' AS 列1,
    '' AS 列2,
    180 AS 数值;

这样查询结果的最后一行就是固定的180总计。


问题2:当Cat列数值为5,且id为真实ID、mainid为子ID时,如何通过SELECT查询得到总计180的结果?

先理清楚表结构假设哈:你的表应该有id(真实ID,也就是主记录的ID)、mainid(子记录的ID,关联到主记录的id)、Cat(分类列),还有用来求和的数值列(比如value)。针对Cat=5的行,我分两种常见场景给出查询:

场景1:找出Cat=5的主-子记录组,总和恰好为180

如果需要统计每个主记录(Cat=5)加上它关联的所有子记录的总和,然后筛选出总和为180的组,可以用LEFT JOIN关联主、子记录后求和:

SELECT 
    p.id AS 主记录ID,
    SUM(COALESCE(p.value, 0) + COALESCE(c.value, 0)) AS 组总和
FROM your_table p
LEFT JOIN your_table c ON p.id = c.mainid  -- 关联主记录和它的子记录
WHERE p.Cat = 5
GROUP BY p.id
HAVING 组总和 = 180;

这里用COALESCE是防止主/子记录的value为NULL,确保求和不会出错。查询结果会返回所有满足“Cat=5的主记录+子记录总和为180”的主记录ID和对应总和。

场景2:强制Cat=5相关记录的总计显示为180

如果不管实际总和是多少,需要让查询结果的总计行固定为180,同样用UNION ALL追加总计行:

SELECT 
    id,
    mainid,
    value AS 数值
FROM your_table
WHERE Cat = 5
UNION ALL
SELECT 
    NULL AS id,
    NULL AS mainid,
    180 AS 数值;

如果需要按主记录分组后再显示固定总计,写法如下:

SELECT 
    p.id AS 主记录ID,
    SUM(COALESCE(p.value, 0) + COALESCE(c.value, 0)) AS 组总和
FROM your_table p
LEFT JOIN your_table c ON p.id = c.mainid
WHERE p.Cat = 5
GROUP BY p.id
UNION ALL
SELECT 
    '总计' AS 主记录ID,
    180 AS 组总和;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:01:45