1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda em exercício de Sql

Discussão em 'Programação' iniciada por Oni92, 20 de Maio de 2018. (Respostas: 3; Visualizações: 408)

  1. boa tarde
    Precisava de uma ajuda urgente em sql.. pois não estou a conseguir resolver um exercício e o trabalho é para entregar daqui a 3 dias :( já pensei em tudo e mais alguma coisa para resolver mas tá difícil além de que não estamos a conseguir implementar um atributo que é necessário para resolver esse problema que é o seguinte:
    Cada jogo deve ter um atributo que indique se se tratou de uma vitória da equipa
    visitada (‘1’), de um empate (‘x’) ou de uma vitória da equipa visitante (‘2’), calculado através
    da soma dos golos da equipa visitada e autogolos da equipa visitante e subtraindo a este
    resultado a soma dos golos da equipa visitante e autogolos da equipa visitada. Se o total for >
    0 o resultado será ‘1’; se for < 0 o resultado será ‘2’; se for 0 o resultado será ‘x’.


    Nos apenas colocámos o resultado numa string do género 3-0.. em que a equipa da casa ganhou por 3..

    A alínea diz

    Dada uma época, determinar o(s) nome(s) da(s) equipa(s) que ficaram em
    primeiro lugar (com mais pontos do que todas as outras). O número de pontos
    de cada equipa no campeonato é calculado somando os pontos que ela obtém
    em cada um dos jogos em que participa (0 para derrota, 1 para empate e 3
    para vitória),

    As tabelas que temos para resolver isso são:
    Relação de associação entre EQUIPA e JOGO:
    EQUIPA(nomeEquipa, sigla, presidente, ident_treinador)
    CC = {nomeEquipa}
    CE = {ident_treinador}REF TREINADOR(identificacao)
    JOGO (época,visitante,visitado, dataRealizacao, resultado)
    CE = {visitado,visitante}REF EQUIPA
    CE = {epoca} REF CAMPEONATO(epoca)
    OCC = {{dataRealizacao,visitado},{dataRealizacao,visitante}}

    Relação de associação entre JOGO e JOGADOR:
    JOGO (época,visitante,visitado, dataRealizacao, resultado)
    JOGADOR(ident_jogador,posicao)
    CE = ident_jogador REF CONTRATADO(identificacao)
    JOGO_JOGADOR(época,visitante,visitado, identificação,numAutoGolo,numGolo)
    CE = {epoca,visitante,visitado} REF JOGO
    CE = {identificacao} REF JOGADOR
    RIA1:Todas as jogos têm de existir em JOGO-JOGADOR
    RIA2:Todas as jogadores têm de existir em JOGO_JOGADOR


    Mas aquela coisa do atributo é que é de loucos ..não tou mesmo a ver como seja possível implementar
     
  2. vrael

    vrael Power Member

    Team TeamGame Game.. É uma associação n:m. A mesma coisa para o Game e Player (btw, devias usar nomes em inglês é o standard e não custa nada começar já).
     
  3. reise

    reise Power Member

    Primeiro, não guardes o resultado como string mas sim em duas colunas separadas golos do visitado, golos do visitante.
    Segundo, não percebo como distingues os golos e os auto-golos, e como isso importa para saber quem ganhou.
    Terceiro, o que dizes não corresponde à alinea!
    Quarto, com um exemplo prático percebe-se mlheor, aqui para Oracle mas deve funcionar igual em outras BDs ANSI SQL:
    Código:
    CREATE TABLE z_game
    (
       year_game         NUMBER,
       game_date         DATE,
       id_team_home      NUMBER,
       id_team_visitor   NUMBER,
       home_goals        NUMBER,
       visitor_goals     NUMBER
    );
    
    -- some data
    INSERT INTO z_game VALUES (2018,SYSDATE, 1,2,1,0);
    INSERT INTO z_game VALUES (2018,SYSDATE, 2,1,0,0);
    
    INSERT INTO z_game VALUES (2018,SYSDATE+1,1,3,1,0);
    INSERT INTO z_game VALUES (2018,SYSDATE+1,3,1,3,0);
    
    -- classification of all team matches in descending order
    SELECT *
        FROM (  SELECT year_game,
                       id_team,
                       SUM (final_result) classification
                  FROM (SELECT year_game,
                               id_team_home AS id_team,
                               CASE
                                  WHEN home_goals > visitor_goals THEN 3
                                  WHEN home_goals = visitor_goals THEN 1
                                  ELSE 0
                               END
                                  AS final_result
                          FROM z_game
                        UNION ALL
                        SELECT year_game,
                               id_team_visitor,
                               CASE
                                  WHEN home_goals > visitor_goals THEN 0
                                  WHEN home_goals = visitor_goals THEN 1
                                  ELSE 3
                               END
                                  AS final_result
                          FROM z_game)
              GROUP BY year_game,
                       id_team)
    ORDER BY classification DESC;
     
  4. Consegui safar-me :D :D
     

Partilhar esta Página