python - 带有 JOIN 和 GROUP BY SQL 查询的 Django COUNT

标签 python mysql sql django

此 SQL 查询的正确 Django View 和 HTML 是什么?:

SELECT 
  hood.`hood`,
  COUNT(business.`id`) AS TOTAL 
FROM
 `hood` 
JOIN business 
  ON hood.`id` = business.`hood_id` 
WHERE business.`city_id` = 8 
GROUP BY hood.`id` 
ORDER BY TOTAL DESC 
LIMIT 5 ;

我的模型是:

class Hood(models.Model):
    name = models.CharField(max_length=50, db_column='hood')
    slugname = models.SlugField(max_length=50, blank=True)
    city = models.ForeignKey('City', related_name='hoods')
    location = models.ForeignKey('Location', related_name='hoods')
    switch = models.SmallIntegerField(null=True, blank=True, default='1')
    class Meta:
        db_table = 'hood'  


class Business(models.Model):
    name = models.CharField(max_length=50, db_column='name', blank=True)
    slugname = models.SlugField(max_length=50, blank=True)
    city = models.ForeignKey('City', related_name="business")
    hood = models.ForeignKey('Hood', null=True, blank=True, related_name="business")
    ....

还有 HTML 模板?

谢谢!

最佳答案

查看关于聚合的文档: https://docs.djangoproject.com/en/1.6/topics/db/aggregation/

您应该能够编写一个 View ,该 View 返回一个查询集,其计数与此类似:

from django.db.models import Count
Hood.objects.filter(business__city_id=8).annotate(bus_count=Count('business__id'))

至于 HTML,这完全取决于您。不过,如果您提供该查询集,则可以使用 {{ object.bus_count }} 获取计数。

关于python - 带有 JOIN 和 GROUP BY SQL 查询的 Django COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414042/

相关文章:

mysql - 为 2 列选择不同值,但不是第 3 列

sql - 在 SQL 中是否有与 argmax 等效的东西?

python - 使用 Kerberos 将 Kafka-Python 与集群连接

python - 检查两个列表在 Python 中是否至少有 2 个共同项目的最快方法?

python - 如何使用 python 在绘图中使用交互式单击事件打开文件

python - 从列表列表中随机选择 X 个列表

java - JPA + hibernate + MySQL : How to propagate a schema into the connection?

php - 需要解释 $_GET 的 isset

MySQL:SELECT 查询,然后从该查询中删除列相等的记录

c# - 如何获得 firebird 数据库的独占锁以执行模式更改?