代码之家  ›  专栏  ›  技术社区  ›  Saturnix

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

  •  0
  • Saturnix  · 技术社区  · 7 年前

    我有一个像这样的数据集

    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…这是正确的方法吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

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