2011-04-11 3 views
0

MS-SQL 게임 결과 테이블에 홈 팀, 홈 팀 기록, 원정 팀 및 원정 팀 기록이 있습니다. 팀, 승리 및 손실을 먼저 쿼리하고 전체 승리 (내림차순), 총 손실 (오름차순) 순으로 쿼리를 시도합니다. 테이블에는에 wins 또는 losses 열이 없습니다. 승리와 손실은 점수에 따라 계산되어야합니다. 보기 또는 임시 테이블을 만들어야하는 경우 팀, 승리 및 손실로 해당보기를 만드는 방법은 무엇입니까?다양한 열 합계를 기반으로 SQL 정렬

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

편집 : 당신이 당신의 쿼리 정보, 당신은 ORDER BY 절에 집계를 사용할 수있는 철수 수 있습니다 가정

+0

는 명확히 승 손실은 테이블의 열 없습니다합니다. 그들은 홈 스코어와 어웨이 스코어 – mp42871

+0

을 기반으로 계산되어야합니다. 그러면 테이블 구조와 샘플 데이터를 게시해야합니다! – JNK

+0

개인적으로 선호하는 것은 현재 시즌의 승리/손실에 대한 요약을 제공하고 해당보기에서 쿼리를 실행하는 것입니다. – JNK

답변

0
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 
1

에만 점수와 코멘트

에 대한 업데이트가 저장되고, 당신이 ' 임시 테이블이나 CTE를 사용하고 싶다면 (지원하는 경우 사용중인 DBMS에 따라 다름) 먼저 팀과 승/패가있는 테이블을 만든 다음 SELECTORDER을 입력하면됩니다. .

+0

승리와 손실이 내 테이블의 열이 아니라 테이블에 게임의 최종 점수가 포함되어 있습니다. – mp42871

+0

팀, 승리 및 손실이있는 테이블을 만드는 구문은 무엇입니까? – mp42871

+0

@ mp42871 그것은 당신이 사용하고있는 데이터베이스에 달려 있습니다 - 당신이 더 자세하게 질문을 편집한다면 사람들은 그들의 대답을 업데이트 할 수 있습니다 –

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

자세한 내용은 스키마와 샘플 데이터를 제공하십시오.

0

숙제?

어쨌든 SQL 문에서 순서가있는 열을 따라 정렬 순서를 지정할 수 있습니다. 예를 들어,

select x, y, z from table order by x asc, y desc, z asc