【问题标题】:In Django, how can I get a count of records based on a subquery of a subquery?在 Django 中,如何根据子查询的子查询获取记录数?
【发布时间】:2020-03-13 10:51:51
【问题描述】:

如果棒球运动员在一场比赛中出场一次或多次,他就会参加比赛。因此,要计算一名球员参加的比赛数量,您需要计算该球员出场的一局比赛。

这是我的模型:

class Player(models.Model):
    ...

class Game(models.Model):
    ...

class Inning(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)

class Appearance(models.Model):
    inning = models.ForeignKey(Inning, on_delete=models.CASCADE)
    player = models.ForeignKey(Player, on_delete=models.CASCADE)

实现我想要的SQL查询是:

SELECT COUNT(*)
FROM games_game
WHERE id IN (SELECT game_id
             FROM innings_inning
             WHERE id IN (SELECT inning_id
                          FROM appearances_appearance
                          WHERE player_id = 1)) 

如果不使用 Raw SQL,我如何在 Django 中做到这一点?

请注意,这是针对 PlayerDetailView 的,因此我只需要将它用于单个 Player 对象。

【问题讨论】:

    标签: sql django django-models


    【解决方案1】:

    您可以通过以下方式执行此类计数:

    Game.objects.filter(<b>inning__appearance__player=<i>my_player</i></b>).distinct().count()

    my_player 是您要计算Games 的玩家。

    【讨论】:

    • 请在外观和播放器之间添加第二个下划线。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多