我有一張這樣的桌子
| 類別 | 子類 | 子類別 |
|---|---|---|
| 貓_1 | 子貓_1 | 子_子貓_1 |
| 貓_1 | 子貓_1 | 子_子貓_2 |
| 貓_1 | 子貓_2 | 子_子貓_3 |
| 貓_2 | 子貓_2 | 子_子貓_4 |
| Cat_3 | 子貓_3 | 子_子貓_5 |
我需要找出每個子類別出現在多少個類別中。所以我基于上表的預期輸出是:
| 子類 | 全部的 |
|---|---|
| 子貓_2 | 2 |
| 子貓_1 | 1 |
| 子貓_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 相關,這里更像是根據子查詢創建的臨時表獲取結果。
有誰知道我怎樣才能做到這一點(或者甚至可能)?
uj5u.com熱心網友回復:
這應該可以勝任
dictionary = {}
queryset = YOUR_queryset_with_table_HERE.objects.all()
for i in queryset:
subcategory = i.subcategory
#check if subcategory already in dictionary
#if not create it with 1, else =1
if dictionary["subcategory"]:
dictionary["subcategory"] = 1
else:
dictionary["subcategory"] = 1
print(dictionary)
uj5u.com熱心網友回復:
假設您有兩個類似這樣的多對多關系的模型:
class Category(models.Model):
category_name = models.CharField(max_length=30)
class SubCategory(models.Model):
subcategory_name = models.CharField(max_length=30)
category = models.ManyToManyField(Category)
然后這應該給你每個子類別出現的類別總數:
results = SubCategory.objects.all().annotate(total=Count('category')).values('subcategory_name', 'total')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387415.html
標籤:sql 姜戈 django-orm
上一篇:sql中的最大頻率
下一篇:如何從SQL查詢中獲得最大結果?
