【问题标题】:Django ORM. Joining subquery on conditionDjango ORM。根据条件加入子查询
【发布时间】:2020-12-26 05:00:30
【问题描述】:

我有一个 TickerStatement 表,其中包含有关公司的财务报表

class Statements(models.TextChoices):
    """
    Supported statements
    """
    capital_lease_obligations = 'capital_lease_obligations'
    net_income = 'net_income'
    price = 'price'
    total_assets = 'total_assets'
    short_term_debt = 'short_term_debt'
    total_long_term_debt = 'total_long_term_debt'
    total_revenue = 'total_revenue'
    total_shareholder_equity = 'total_shareholder_equity'


class TickerStatement(TimeStampMixin):
    """
    Model that represents ticker financial statements
    """
    name = models.CharField(choices=Statements.choices, max_length=50)
    fiscal_date_ending = models.DateField()
    value = models.DecimalField(max_digits=MAX_DIGITS, decimal_places=DECIMAL_PLACES)
    ticker = models.ForeignKey(Ticker, on_delete=models.CASCADE, null=False,
                               related_name='ticker_statements')

现在我正在尝试计算一个乘数。公式如下:

(short_term_debt + total_long_term_debt) / total_shareholder_equity

我写了一个原始的 SQL 查询

SELECT "fin_tickerstatement"."fiscal_date_ending",
       t2.equity                             AS "equity",
       value                                 AS "debt",
       short_term_debt                       AS "short_term_debt",
       (value + short_term_debt) / t2.equity AS "result"
FROM "fin_tickerstatement"
         JOIN
     (SELECT "fin_tickerstatement"."fiscal_date_ending",
             fin_tickerstatement.value AS "equity"
      FROM "fin_tickerstatement"
      WHERE ("fin_tickerstatement"."ticker_id" = 12
          AND "fin_tickerstatement"."fiscal_date_ending" >= date'2015-09-03'
          AND "fin_tickerstatement"."name" = 'total_shareholder_equity')
      GROUP BY "fin_tickerstatement"."fiscal_date_ending",
               fin_tickerstatement.value
      ORDER BY "fin_tickerstatement"."fiscal_date_ending" DESC) t2
     ON fin_tickerstatement.fiscal_date_ending = t2.fiscal_date_ending
         JOIN
     (SELECT "fin_tickerstatement"."fiscal_date_ending",
             fin_tickerstatement.value AS "short_term_debt"
      FROM "fin_tickerstatement"
      WHERE ("fin_tickerstatement"."ticker_id" = 12
          AND "fin_tickerstatement"."fiscal_date_ending" >= date'2015-09-03'
          AND "fin_tickerstatement"."name" = 'short_term_debt')
      GROUP BY "fin_tickerstatement"."fiscal_date_ending",
               fin_tickerstatement.value
      ORDER BY "fin_tickerstatement"."fiscal_date_ending" DESC) t3
     ON fin_tickerstatement.fiscal_date_ending = t3.fiscal_date_ending
WHERE ("fin_tickerstatement"."ticker_id" = 12
    AND "fin_tickerstatement"."fiscal_date_ending" >= date'2015-09-03'
    AND "fin_tickerstatement"."name" = 'total_long_term_debt')
GROUP BY "fin_tickerstatement"."fiscal_date_ending",
         equity,
         debt,
         short_term_debt
ORDER BY "fin_tickerstatement"."fiscal_date_ending" DESC;


并且不知道如何将其翻译成 Django ORM。也许你有一些想法或者知道一些可以帮助我的 Django 插件。

【问题讨论】:

    标签: django join subquery django-orm


    【解决方案1】:

    解决这个问题的唯一方法是安装django-query-builder

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2014-05-19
      • 2022-01-21
      • 2014-09-04
      • 2021-11-15
      • 2012-03-28
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多