简体   繁体   English

排序两个子查询的总和

[英]Sorting the sum of two subqueries

I'm wanting to sort the top performers based on the sum of two different queries. 我想根据两个不同查询的总和对效果最好的排序。 How can I do this? 我怎样才能做到这一点?

Let's say I'm tracking player stats for a tournament and have these models: 假设我正在跟踪比赛的球员统计数据,并具有以下模型:

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)

I'd like to produce a report formatted like this: 我想生成一个格式如下的报告:

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

for the top 10 players sorted by total score. 前10名球员的总得分。 What would the simplest way to do this be? 最简单的方法是什么? I'm fine using either python/sqlalchemy or sql. 我可以使用python / sqlalchemy或sql很好。

via SQL: 通过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;

The method in which you limit the 10 results can change based on the type of SQL you're using. 限制10个结果的方法可以根据所使用的SQL类型而改变。 LIMIT 10 works with netezza, SELECT TOP 10 works with microsoft sql, etc, etc. LIMIT 10与netezza一起使用,SELECT TOP 10与Microsoft sql等一起使用,等等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM