Py学习  »  Django

django或sql:查找分组查询集的给定列的唯一值的数目

Saturnix • 5 年前 • 1437 次点击  

我有一个像这样的数据集

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

从这个结果中,我如何清除所有只出现一次的成员(只有一个位置的成员)?我试过使用distinct,但它不能解决问题。

另外,我想用django orm编写这个,只需一个queryset,但是 group_by 必须与一起使用 annotate aggregate ,但这些只适用于sum,count,avg…这是正确的方法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39617
 
1437 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    5 年前

你可以用 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;