查询应该是查询 item
表和:
过滤掉 active=0
项目
选择 id
以及 groupId
至少还有一个项目 groupId
###示例:
| id | groupId | active |
| --- | ------- | ------ |
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 2 | 0 |
| 4 | 3 | 1 |
| 5 | 3 | 1 |
| 6 | 4 | 1 |
期望输出:
| id | groupId |
| --- | ------- |
| 4 | 3 |
| 5 | 3 |
解释 groupID
1:无效,因为只有1个成员 groupID
2:无效,因为有两个成员,但有一个不活动 groupID
3:有效 groupID
4:无效,因为只有1个成员
我试过的
SELECT id, groupId
FROM items
WHERE id IN (
SELECT id
FROM items
WHERE active=1
GROUP BY groupId
HAVING COUNT(*) > 1
);
但我知道 id must appear in the GROUP BY clause or be used in an aggregate function
错误。我知道我可以和 sql_mode
但我宁愿避免这个错误。
2条答案
按热度按时间nxowjjhe1#
转到窗口功能:
ffvjumwh2#
窗口功能是一种方式。
但如果要修复查询,则应该这样做:
因为我们正在计算哪个groupid对于同一个groupid有超过1个id