gpt4 book ai didi

python - 如何包含要查找的列,但将其从 GROUP BY 中排除?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:06 29 4
gpt4 key购买 nike

我正在尝试使用 Django ORM 执行以下查询:

SELECT object_repr, content_type_id, COUNT(object_repr) 
FROM django_admin_log GROUP BY object_repr ORDER BY COUNT(object_repr);

我得到的最接近的是:

LogEntry.objects.values('object_repr', 'content_type__id')\
.annotate(num_logs=Count('object_repr'))\
.order_by('num_logs')

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

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

values() 方法包括“GROUP BY”段中的所有指定列,我不想在我的 GROUP BY 中使用 content_type_id。甚至可以在 ORM 中执行此操作吗?

编辑:事实证明这在 ORM 中是不可能的。但是,为了将来人们发现这个问题,我编写的查询满足了我的需要:

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

基本上是一个自内连接。祝你好运,希望这对你有所帮助。

最佳答案

实际上,我最近几天刚刚经历过这个问题并发布了一个问题,但我认为它的措辞不如你的好。

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

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

这是我的问题的链接以供引用:Can I control the GROUP BY in django 1.3's orm?

关于python - 如何包含要查找的列,但将其从 GROUP BY 中排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849179/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com