代码之家  ›  专栏  ›  技术社区  ›  sarath kumar sontam

Django ORM groupby

  •  1
  • sarath kumar sontam  · 技术社区  · 2 年前
    row_1(PK) 第2行 第3列
    1. 一行
    2. 一行
    3. 一行

    数据库表中的数据与上表类似。

    SELECT
       GROUP_CONCAT(row_3)
    FROM table_
    WHERE row_2 = 'row'
    GROUP BY row_2;
    

    我的Django查询实现了上述mysql查询

    table_.objects.filter(
        row_2='row'
    ).annotate(
        val=GroupConcat('row_3', '')
    ).values('val')
    

    当将上述ORM转换为原始mysql查询时,它是通过主键(row_1)进行查询的。我想按“row_2”列分组。

    1 回复  |  直到 2 年前
        1
  •  1
  •   willeM_ Van Onsem    2 年前

    你需要使用 .order_by(…)  [Django-doc] ,是的,我知道这听起来很奇怪,所以:

    table_.objects.filter(row2='row').values('row2').annotate(
        val=GroupConcat('row3', '')
    ).order_by('row2')

    但在这里,看起来你实际上正在制作 总数的 ,因为只有一种值 row 2 由于筛选而被拾取,因此不需要按该值进行分组。您可以使用 .aggregate(…)  [Django-doc] 那样的话

    table_.objects.filter(row2='row').aggregate(val=GroupConcat('row3', ''))