ORM多表分组、F与Q查询

编辑本博客

一、分组查询

select谁就annotate谁,group by谁就values谁,之后要啥再通过values拿啥

语法模型:后表模型.values(‘pk’).annotate(聚合函数(关联表__字段)).values(所需字段1,所需字段2,所需字段3)

先连接表,再分组查询

需求:查询每一个出版社出版的名称以及书籍个数

SQL连接表:

SELECT * FROM app_book INNER JOIN app_publish on app_book.publish_id = app_publish.nid
View Code

ORM连接表:

Book.objects.values("publish").values()
View Code

SQL链表后分组:

SELECT count(title),app_publish.name FROM app_book INNER JOIN app_publish on app_book.publish_id = app_publish.nid GROUP BY publish_id
View Code

扫描二维码关注公众号,回复: 2145224 查看本文章

ORM链表后分组,方式一:

Publish.objects.values("name").annotate(Count("book__title"))
View Code

ORM链表后分组,方式二:

通过values拿所需数据即可

Publish.objects.values("nid").annotate(c=Count("book__title")).values('name',"c")
View Code

练习二:

查询每一个作者的名字以及出版过的书籍的最高价格

SQL语法:

SELECT app_author.name,max(price) FROM app_author INNER JOIN app_book_authors ON app_author.nid = app_book_authors.author_id INNER JOIN app_book ON app_book_authors.book_id = app_book.nid ORDER BY app_author.nid
View Code

ORM操作:

Author.objects.values("nid").annotate(max_price=Max("book__price")).values('name',"max_price")
View Code

练习三:

猜你喜欢

转载自www.cnblogs.com/yaya625202/p/9302226.html