繁体   English   中英

SQL排序基于各种列的总和

[英]SQL sort based on sum of various columns

我有一个MS-SQL游戏结果表,其中包含主队,主队得分,客队和客队得分。 我试图查询首先排序的队伍,胜利和损失,总胜利(降序)然后是总损失(升序)。 该表包含赢或输列。 必须根据分数计算胜利和损失。 如果我需要创建视图或临时表,如何使用团队,胜利和损失创建该视图?

假设您可以在查询中提取该信息,则可以在ORDER BY子句中使用聚合:

ORDER BY
    SUM(win) DESC
   ,SUM(loss) ASC

编辑 :更新评论

只有存储的分数,您将要么使用临时表或CTE(取决于您使用的DBMS,如果支持它们)首先创建一个包含团队及其中的胜负的表,以及然后你可以从那里SELECT和相应的ORDER

SELECT *
FROM MyTable
WHERE ...
ORDER BY SUM(win) DESC, SUM(loss) ASC

有关更详细的答案,请提供架构和示例数据。

家庭作业?

无论如何,您可以通过跟随订单的列来指定SQL语句中的排序顺序。 例如,

select x, y, z from table order by x asc, y desc, z asc
select 
    teamName, 
    'wins' = 
        case 
            when wins is null then 0 
            else wins 
        end, 
    'losses' = 
        case 
            when losses is null then 0 
            else losses 
        end 
from 
    teams 
left join 
( 
    select 
        a.wins as wins, 
        b.losses as losses, 
        'team' = 
            case 
                when a.team is null then b.team 
                else a.team 
            end 
    from 
    ( 
        select 
            homeTeam as team, 
            sum(wins) as wins 
        from 
        ( 
            select 
                homeTeam, 
                count(*) as wins 
            from 
                results 
            where 
                homeScore > awayScore 
            group by 
                homeTeam 
            union all 
            select 
                awayTeam, 
                count(*) as wins 
            from 
                results 
            where 
                homeScore < awayScore 
            group by 
                awayTeam         
        ) a 
        group by homeTeam 
    ) a 
    full outer join 
    ( 
        select 
            homeTeam as team, 
            sum(losses) as losses 
        from 
        ( 
            select 
                homeTeam, 
                count(*) as losses 
            from 
                results 
            where 
                homeScore < awayScore 
            group by 
                homeTeam 
            union all 
            select 
                awayTeam, 
                count(*) as losses 
            from 
                results 
            where 
                homeScore > awayScore 
            group by 
                awayTeam 
        ) a 
        group by 
            homeTeam 
    ) b 
    on a.team = b.team 
) c 
on teams.id = c.team

暂无
暂无

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

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