首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何包括用于查找的列,但将其排除在GROUP BY中?

如何包括用于查找的列,但将其排除在GROUP BY中?
EN

Stack Overflow用户
提问于 2011-07-27 18:14:50
回答 1查看 1.2K关注 0票数 4

我试图使用Django ORM执行以下查询:

代码语言:javascript
复制
SELECT object_repr, content_type_id, COUNT(object_repr) 
FROM django_admin_log GROUP BY object_repr ORDER BY COUNT(object_repr);

我最近得到的是:

代码语言:javascript
复制
LogEntry.objects.values('object_repr', 'content_type__id')\
                .annotate(num_logs=Count('object_repr'))\
                .order_by('num_logs')

不幸的是,这会产生一个SQL语句,返回错误的结果(或者至少是一个意外的结果):

代码语言:javascript
复制
SELECT `django_admin_log`.`object_repr`, `django_admin_log`.`content_type_id`, 
COUNT(`django_admin_log`.`object_repr`) AS `num_logs` 
FROM `django_admin_log` 
GROUP BY `django_admin_log`.`object_repr`, `django_admin_log`.`content_type_id` 
ORDER BY num_logs

方法包含"GROUP BY“段中的所有指定列,我不希望content_type_id在我的组BY中。在ORM中能做到这一点吗?

编辑:发现这在ORM中是不可能的。然而,为了将来的人们发现这个问题,我所写的查询做了我需要的:

代码语言:javascript
复制
SELECT DISTINCT djl2.id, djl1.object_id, djl1.object_repr,
                         djl1.content_type_id,
                         COUNT(djl1.content_type_id) AS num_items
FROM django_admin_log AS djl1
    INNER JOIN django_admin_log AS djl2
    ON djl1.id=djl2.id
GROUP BY djl1.object_repr, djl1.content_type_id
ORDER BY num_items

基本上是自我内在的连接。祝你好运,希望这能帮上忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-27 18:31:44

实际上,我在过去几天里刚刚经历过这个问题,并发布了一个问题,但在我看来,它的措辞不如你的好。

无论如何,我发现,虽然Sqlite和MySql在运行查询时不会出现错误,但在group子句中选择未找到的列时,这些结果可能有些可疑,因为sql的标准显然是不允许这样做。我知道MSSQL在尝试时会返回一个错误,我不确定其他类型的sql。

基于此,我得出这样的结论: django不允许通过ORM生成这样的查询,因为它在技术上是无效的,即使它在某种程度上可以在某些类型的SQL上工作。

以下是我的问题的链接,以供参考:Can I control the GROUP BY in django 1.3's orm?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6849179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档