【问题标题】:Sorting the sum of two subqueries对两个子查询的总和进行排序
【发布时间】:2018-08-22 00:10:18
【问题描述】:

我想根据两个不同查询的总和对表现最好的人进行排序。我该怎么做?

假设我正在跟踪锦标赛的玩家统计数据并拥有以下模型:

class Player(db.Model):
    id = db.Column(db.String(1024), primary_key=True)
    name = db.Column(db.String(80))
    dob = db.Column(TIMESTAMP, nullable=True)
    start_ts = db.Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=False)
    end_ts = db.Column(TIMESTAMP, nullable=True)
    school_id = db.Column(db.String(1024), db.ForeignKey('school.id'), nullable=False)


class School(db.Model):
    id = db.Column(db.String(1024), primary_key=True)
    name = db.Column(db.String(80))
    address = db.Column(db.String(80))
    state = db.Column(db.String(2))


class GameStats(db.Model):
    id = db.Column(db.String(1024), primary_key=True)
    date = db.Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=False)
    player_id = db.Column(db.String(1024), db.ForeignKey('school.id'), nullable=False)
    scored = db.Column(Numeric(0, 0), nullable=False)

我想生成一份格式如下的报告:

player.id | player.name | total_score (scored from day 1 + day2) | school.name | school.state

按总分排序的前 10 名球员。最简单的方法是什么?我可以使用 python/sqlalchemy 或 sql。

【问题讨论】:

  • 您是否尝试过使用order_by
  • 不,我没有,我会看看。我对子查询不太熟悉,所以我不太确定如何将两个相加,特别是因为这两个查询仅在过滤日期上有所不同。

标签: python sql postgresql sqlalchemy


【解决方案1】:

通过 SQL:

SELECT
    player.id,
    player.name,
    SUM(gamestats.scored) AS total_score,
    school.name,
    school.state
FROM
    player
    INNER JOIN school
    ON player.school_id = school.id
    INNER JOIN gamestats
    ON player.id = gamestats.player_id
WHERE
    gamestats.date >= <whatever day 1 is>
    AND gamestats.date <= <whatever day 2 is>
GROUP BY
    player.id,
    player.name,
    school.name,
    school.state
ORDER BY
    total_score DESC
LIMIT 10;

限制 10 个结果的方法可以根据您使用的 SQL 类型而改变。 LIMIT 10 适用于 netezza,SELECT TOP 10 适用于 microsoft sql 等。

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多