【问题标题】:How can I pull out a row in a GROUP BY Django query?如何在 GROUP BY Django 查询中提取一行?
【发布时间】:2020-10-03 00:19:33
【问题描述】:

我有一张这样的桌子:

EVENT
-------------
user_id   thumbnail_name
0         event/abc.jpg
0         event/efg.jpg
0         event/xyz.jpg
1         event/lmn.jpg
1         event/opq.jpg
2         event/rsf.jpg

如何按 user_id 分组并检索任意缩略图?预期输出:

[ {user_id: 0, thumbnail_name: event/abc.jpg},
  {user_id: 1, thumbnail_name: event/lmn.jpg},
  {user_id: 2, thumbnail_name: event/rsf.jpg},
]

这在 SQL 中甚至可能在 Django ORM 中实现吗?

【问题讨论】:

    标签: mysql django database django-models


    【解决方案1】:

    在 SQL Server 中使用 FOR JSON AUTO

    SELECT *
    FROM EVENT
    FOR JSON AUTO
    

    如果您希望只返回一行,那么您可以在 FOR JSON AUTO 之后添加 Without_Array_Wrapper,并在 AUTO 关键字之后使用逗号,您将得到一个对象而不是数组:

    SELECT *
     FROM EVENT
     FOR JSON AUTO, Without_Array_Wrapper;
    

    在 MySQL 中

    SELECT json_object('user_id', user_id, 'thumbnail_name', thumbnail_name)
    FROM EVENT;
    

    元首修改

    SELECT JSON_ARRAYAGG(JSON_OBJECT('user_id', user_id, 'thumbnail_name', thumbnail_name)) from EVENT;
    

    【讨论】:

    • 这个语法在 MySQL 中没有编译
    • @Rage 更新了 mysql 版本,如果这不起作用,请告诉我
    • 您的查询现在可以编译,但它不按 user_id 分组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2015-12-10
    相关资源
    最近更新 更多