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

MySQL GROUP BY查询失效:如何筛选同时满足双id_funz的id_type

解决MySQL GROUP BY筛选同时满足多条件的id_type问题

嘿,我来帮你拆解一下你遇到的问题~ 首先你写的语句有两个核心问题:语法错误和逻辑偏差,咱们一个个说:

1. 你的语句为什么不生效?

语法错误

你写的语句里括号配对有问题,而且GROUP BY的位置也不对。原语句:

SELECT * FROM table WHERE (id_funz = 26 AND state = 1) and ((id_funz= 28 AND state = 1) group by id_type

这里((id_funz= 28 AND state = 1)少了闭合的括号,而且GROUP BY必须放在WHERE子句之后,整体语法不合法,数据库会直接报错。

逻辑错误

更关键的是,你用AND连接了id_funz=26和id_funz=28这两个条件——但单条记录的id_funz不可能同时等于26和28啊!这就像找一个既是苹果又是香蕉的水果,根本不存在,所以这个WHERE条件永远不会返回任何结果,更别说后续的GROUP BY了。

2. 正确的实现方法

我们要找的是同一个id_type下,同时存在两条记录:一条是id_funz=26且state=1,另一条是id_funz=28且state=1,这里给你两种常用的靠谱写法:

方法一:GROUP BY + HAVING 统计符合条件的条目

先筛选出所有符合两个条件之一的记录,再按id_type分组,最后用HAVING确保分组里包含了两个目标id_funz:

SELECT id_type
FROM your_table -- 记得替换成你的真实表名
WHERE (id_funz = 26 AND state = 1) OR (id_funz = 28 AND state = 1)
GROUP BY id_type
HAVING COUNT(DISTINCT id_funz) = 2;
  • WHERE子句先把范围缩小到我们关心的两类记录
  • GROUP BY id_type把相同id_type的记录归为一组
  • HAVING COUNT(DISTINCT id_funz) = 2确保这个分组里同时有26和28这两个id_funz(DISTINCT去重后计数为2,就代表两个条件都满足)

方法二:EXISTS子查询验证

先找到所有有id_funz=26且state=1的id_type,再检查这些id_type是否存在对应的id_funz=28且state=1的记录:

SELECT id_type
FROM your_table t1
WHERE id_funz = 26 AND state = 1
AND EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.id_type = t1.id_type
    AND t2.id_funz = 28 AND t2.state = 1
);

这种方式逻辑更直观,适合理解“同时存在两种记录”的需求,而且如果表数据量很大,性能表现也不错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:26