Jump to content

Recommended Posts

Posted

Olá

Preciso de fazer um query em que o resultado são as medalhas(ouro,prata,bronze e total(soma das 3)) obtidas por cada país em todas edições dos jogos olímpicos. Até aqui tudo bem, a query abaixo apresentada já faz isso.

O problema é que as medalhas obtidas em eventos colectivos(estafeta,etc) só podem ser contadas 1 vez, ou seja , No caso de um evento de estafeta em vez de contar 4 medalhas contar apenas 1.

É possível saber se um evento é do tipo colectivo ou individual através da tabela eventos no campo TIPOEVENTO, porque este campo ou é Individual ou Colectivo.

Penso que seja possível fazer através de uma Subquery com um count(distinct) mas não sei como.

Obrigado.

Diagrama:

fXdwB.jpg

Resultado até agora

1JUFv.jpg

Select PAISES.NOMEPAIS, count(RESULTADOS.CLASSIFICACAO) as Total,
Count(Case when RESULTADOS.CLASSIFICACAO = 1 then 1 end) As OURO,
Count(Case when RESULTADOS.CLASSIFICACAO = 2 then 1 end) As PRATA,
Count(Case when RESULTADOS.CLASSIFICACAO = 3 then 1 end) As BRONZE
From
RESULTADOS
	 INNER JOIN PARTICIPACOES
	 ON RESULTADOS.ANO = PARTICIPACOES.ANO AND RESULTADOS.ESTACAO = PARTICIPACOES.ESTACAO AND RESULTADOS.IDPARTICIPACAO = PARTICIPACOES.IDPARTICIPACAO

	 INNER JOIN dbo.PAISES
	 ON PARTICIPACOES.SIGLAPAIS = PAISES.SIGLAPAIS

	 INNER JOIN dbo.PARTICIPANTES
	 ON PARTICIPACOES.IDPARTICIPANTE = PARTICIPANTES.IDPARTICIPANTE

	 INNER JOIN dbo.EDICOES
	 ON PARTICIPACOES.ANO = EDICOES.ANO AND PARTICIPACOES.ESTACAO = EDICOES.ESTACAO

	 INNER JOIN dbo.ELIMINATORIAS
	 ON RESULTADOS.IDEVENTO = ELIMINATORIAS.IDEVENTO AND RESULTADOS.IDELIMINATORIA = ELIMINATORIAS.IDELIMINATORIA

	 group by NOMEPAIS

	 order by Total desc
Posted

Podes ter uma abordagem naive à coisa e fazer duas queries "iguais", uma para individuais e outra para equipas e depois juntares com um Union All

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

Mas o problema é que toda a estrutura da base de dados é referente a conquistas individuais. É preciso fazer uma query que determinada forma consiga perceber que um determinado numero de atletas, participou no mesmo evento, da mesma edição e ano e que sejam do mesmo país.

Fazendo um union all acho que apenas iria juntar todos registos individuais com os colectivos.

Posted

Já cheguei a um resultado., deixo aqui a resposta

Select A.NOMEPAIS, count(A.RESULTADO) as Total,
Count(Case when A.RESULTADO = 1 then 1 end) As OURO,
Count(Case when A.RESULTADO = 2 then 1 end) As PRATA,
Count(Case when A.RESULTADO= 3 then 1 end) As BRONZE
From
(
  SELECT DISTINCT PAISES.NOMEPAIS AS NOMEPAIS, RESULTADOS.CLASSIFICACAO AS RESULTADO, EVENTOS.IDEVENTO AS IDEVENTO, EVENTOS.TIPOEVENTO AS TIPOEVENTO, PARTICIPACOES.ANO AS ANO
  FROM RESULTADOS
  INNER JOIN dbo.PARTICIPACOES
  ON RESULTADOS.IDPARTICIPACAO = PARTICIPACOES.IDPARTICIPACAO

  INNER JOIN dbo.PAISES
  ON PARTICIPACOES.SIGLAPAIS = PAISES.SIGLAPAIS

  INNER JOIN dbo.EVENTOS
  ON RESULTADOS.IDEVENTO = EVENTOS.IDEVENTO

) AS A
group by A.NOMEPAIS
order by Total desc

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.