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

如何在SELECT语句中省略列却在HAVING子句中使用该列?

解决方案:移除indicator_id列同时保留HAVING条件

嘿,这问题很好解决!你只需要把原来用来生成indicator_id的子查询直接嵌入到HAVING子句里,这样SELECT就只需要返回你想要的id列了。这里给你两种可行的写法:

方法1:直接将子查询嵌入HAVING

这是最直接的修改方式,把原来的indicator_id计算逻辑直接放到HAVING的条件中:

SELECT e.id
FROM events e
WHERE author_id = 32
HAVING e.id >= (
    SELECT MIN(u.id) 
    FROM (
        SELECT MIN(id) id 
        FROM events 
        WHERE author_id = 32 
        GROUP BY type, post_id, table_code, comment_id, context 
        ORDER BY MIN(id) desc 
        LIMIT 15
    ) as u
)
ORDER BY id DESC

这样一来,查询就只会返回id列,同时HAVING子句依然能获取到需要的过滤值,完全满足你的需求。

方法2:使用CTE拆分逻辑(可读性更好)

如果你的查询后续可能需要扩展,用CTE(公共表表达式)把计算indicator_id的部分单独抽出来,逻辑会更清晰:

WITH indicator AS (
    SELECT MIN(u.id) as indicator_id
    FROM (
        SELECT MIN(id) id 
        FROM events 
        WHERE author_id = 32 
        GROUP BY type, post_id, table_code, comment_id, context 
        ORDER BY MIN(id) desc 
        LIMIT 15
    ) as u
)
SELECT e.id
FROM events e
CROSS JOIN indicator
WHERE e.author_id = 32
AND e.id >= indicator.indicator_id
ORDER BY e.id DESC

这种写法把“计算过滤阈值”和“筛选目标数据”两个步骤分开,更容易理解和维护。

两种写法的功能完全一致,你可以根据自己的习惯和查询复杂度选择其中一种~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:23:26