Сортировка SQL по сумме различных столбцов - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть таблица результатов игры MS-SQL , в которой указана команда хозяев, результаты команды хозяев, команды гостей и команды гостей. Я пытаюсь запросить команды, выигрыши и потери, упорядоченные сначала по общим выигрышам (по убыванию), а затем по общим потерям (по возрастанию). Таблица не содержит столбец выигрышей или проигрышей. Выигрыш и проигрыш должны быть рассчитаны на основе оценки. Если мне нужно создать представление или временную таблицу, как мне создать это представление с командами, победами и поражениями?

Ответы [ 4 ]

1 голос
/ 11 апреля 2011
SELECT *
FROM MyTable
WHERE ...
ORDER BY SUM(win) DESC, SUM(loss) ASC

Для более подробного ответа предоставьте свою схему и пример данных.

1 голос
/ 11 апреля 2011

Предполагая, что вы можете получить эту информацию в своем запросе, вы можете использовать агрегаты в ORDER BY предложениях:

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

edit : обновление для комментариев

Сохраняя только оценки, вы захотите использовать временную таблицу или CTE (зависит от того, какую СУБД вы используете для их поддержки), чтобы сначала создать таблицу, в которой есть команды, победы и поражения, итогда вы можете SELECT из этого и ORDER соответственно.

0 голосов
/ 16 апреля 2011
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
0 голосов
/ 11 апреля 2011

Домашнее задание?

В любом случае, вы можете указать порядок сортировки в инструкции SQL, следуя столбцу с порядком.Например,

select x, y, z from table order by x asc, y desc, z asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...