#sql #sorting #sum
#sql #сортировка #сумма
Вопрос:
У меня есть таблица результатов игры на MS-SQL, которая содержит команду хозяев, счет команды хозяев, счет команды гостей и счет команды гостей. Я пытаюсь запросить команды, победы и проигрыши, упорядоченные сначала по общему количеству побед (по убыванию), а затем по общему количеству потерь (по возрастанию). Таблица не содержит столбец выигрышей или проигрышей. Выигрыши и проигрыши должны рассчитываться на основе очков. Если мне нужно создать представление или временную таблицу, как мне создать это представление с командами, победами и поражениями?
Комментарии:
1. чтобы уточнить, выигрыши и проигрыши не являются столбцами в таблице. Они должны быть рассчитаны на основе результатов хозяев и гостей
2. затем вам нужно опубликовать структуру вашей таблицы и некоторые примеры данных!
3. Моим личным предпочтением, вероятно, было бы создать представление, которое дает вам сводку побед / поражений за текущий сезон, и запустить ваш запрос в этом представлении.
Ответ №1:
SELECT *
FROM MyTable
WHERE ...
ORDER BY SUM(win) DESC, SUM(loss) ASC
Для более подробного ответа предоставьте свою схему и образцы данных.
Ответ №2:
Предполагая, что вы можете извлечь эту информацию из своего запроса, вы можете использовать агрегаты в ORDER BY
предложениях:
ORDER BY
SUM(win) DESC
,SUM(loss) ASC
редактировать: обновить для комментариев
Поскольку сохраняются только результаты, вам захочется либо использовать временную таблицу, либо CTE (зависит от используемой вами СУБД, если она их поддерживает), чтобы сначала создать таблицу, в которой указаны команды, их победы и проигрыши, а затем вы можете SELECT
использовать это и ORDER
соответственно.
Комментарии:
1. выигрыши и проигрыши — это не столбцы в моей таблице, скорее таблица содержит окончательный счет игры
2. Каким будет синтаксис для создания таблицы с командами, победами и поражениями?
3. @mp42871 это зависит от того, какую базу данных вы используете — если вы отредактируете свой вопрос более подробно, пользователи смогут обновить свои ответы
4. Я использую Microsoft SQL Server 2008
Ответ №3:
Домашнее задание?
В любом случае, вы можете указать порядок сортировки в инструкции SQL, следуя столбцу с порядком. Например,
select x, y, z from table order by x asc, y desc, z asc
Ответ №4:
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