1

我有一个看起来像这样的数据集

member    position
0    1
0    0
0    1
0    1
1    0
1    1
1    0
1    1
1    1
2    0
2    0
2    0

我想要实现的是知道哪些成员只有一个职位。我从 SQL 开始:

SELECT * FROM 'table' GROUP BY member, position

它给了我

member    position
0    0
0    1
1    0
1    1
2    0

从这个结果中,我怎样才能剔除所有只出现一次的成员(只有 1 个位置的成员)?我已经尝试过 DISTINCT,但它并没有解决问题。

另外,我想在 Django ORM 中使用单个查询集编写此代码,但group_by必须与annotateor一起使用aggregate,但这些只能与 Sum、Count、Avg 一起使用......这是正确的方法吗?

4

1 回答 1

1

您可以将having子句与group by. 你的问题有点模棱两可。如果您想要只有一个position 的成员:

SELECT member
FROM t
GROUP BY member
HAVING MIN(position) = MAX(position);

如果您想要只出现一次的成员/职位组合:

SELECT member, position
FROM t
GROUP BY member, position
HAVING COUNT(*) = 1;
于 2019-08-03T02:48:59.380 回答