【发布时间】:2022-01-21 10:49:00
【问题描述】:
我有一张这样的桌子
| Category | Subcategory | Sub_subcategory |
|---|---|---|
| Cat_1 | Subcat_1 | Sub_subcat_1 |
| Cat_1 | Subcat_1 | Sub_subcat_2 |
| Cat_1 | Subcat_2 | Sub_subcat_3 |
| Cat_2 | Subcat_2 | Sub_subcat_4 |
| Cat_3 | Subcat_3 | Sub_subcat_5 |
我需要找出每个子类别出现在多少个类别中。 所以我根据上表的预期输出是:
| Subcategory | Total |
|---|---|
| Subcat_2 | 2 |
| Subcat_1 | 1 |
| Subcat_3 | 1 |
所以我可以通过运行以下 SQL 查询来得到它:
SELECT subcategory, count(*) total FROM (
SELECT DISTINCT subcategory, category FROM table_1
) as temp_table GROUP BY subcategory ORDER BY total DESC
我花了很多时间尝试使用 Django ORM 获得相同的结果,但无法完成。 我希望这段代码可以工作:
subquery = Table1.objects.values('subcategory', 'category').distinct()
results = subquery.annotate(total=Count('*')).values('subcategory', 'total').order_by('-total')
但它的工作原理与子查询中没有'distinct()' 完全相同,因此它计算每个子类别的所有类别。
我也尝试在其他问题中找到类似的情况,但是带有子查询的通常与JOINing表和使用OuterRef有关,这里更像是根据子查询创建的临时表获取结果。
有谁知道我怎样才能做到这一点(或者甚至可能)?
【问题讨论】:
-
我在发布之前浏览了这些示例,但没有找到与我类似的案例 - 当您从多个表中查询时会使用子查询,在我的情况下,子查询更像是临时表
-
@Sygol 你能编辑你的问题并包括模型吗?
标签: sql django django-orm