Pergunta

Eu estou trabalhando em um site do concurso, onde existem dois tipos de usuários, normal membros do site, e os juízes.Cada um pode utilizar uma ferramenta de arrastar e soltar para ordenar as entradas em um determinado concurso, em ordem de escolha.Quando eles são feitos relevantes ids de acesso estão conectados um valor de classificação, que pode então ser usada para determinar a entrada em concurso tem a maior média de pontuação.O vencedor vai ser, na verdade, determinado pela média das médias de cada grupo.

O que eu gostaria de fazer é acabar com uma tabela mostrando CADA entrada em um determinado concurso, com o título e, em seguida, mostrar-3 valores, avg_normal para a entrada, avg_judge para essa entrada e, em seguida, os dois valores somados e divididos por dois, de modo que o avg_normal e avg_judge cada conta de 50% do avg_all.Finalmente, ordenar a tabela por avg_all.

avg_all = ((avg_normal + avg_judge) / 2)

Eles, a fim entry_ids 1, 2, 3, 4, 5, em ordem.O ranking de valor começa em zero, então:

entry_id, entry_ranking, author_id
1, 0, 1
2, 1, 1
3, 2, 1
4, 3, 1
5, 4, 1

Eu estou esperando para determinar as médias em uma escala de 1 a 100, para uma entrada de classificação de 0 = 100 pontos, 1 = 90, 2 = 80, 3 = 70, e qualquer coisa acima de 4 = 5 pontos

Cada usuário é conectado a um grupo em outra tabela, de modo que eles são um utilizador normal, ou um juiz

Eu quero ser capaz de escrever uma consulta que encontra

1.) A média NORMAL de utilizador voto pontuação

2.) A média de JUIZ de usuário voto pontuação

3.) A média do NORMAL e JUIZ de PONTUAÇÃO.

Para o Usuário Normal média = 93.3333, Juiz média = 70, Total Média = 81.66665

Graças às respostas abaixo, ambas as consultas funcionam como um campeão.

Foi útil?

Solução

Por favor, observe o seguinte:

  • Eu tenho assumido que existe um campo de user_type em membros que armazena ou 'NORMAL' ou 'JULGAR'

  • Eu removi a associação de dados e o grupo de títulos.o título, porque eu não vejo como eles são relevantes para o seu médias.

.

SELECT
  t.title,
  AVG(CASE WHEN user_type = 'NORMAL' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) AS avg_normal,
  AVG(CASE WHEN user_type = 'JUDGE' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) AS avg_judge,
  (AVG(CASE WHEN user_type = 'NORMAL' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) +
  AVG(CASE WHEN user_type = 'JUDGE' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END)) / 2 AS avg_all
FROM rankings r
LEFT JOIN titles t
  ON r.entry_id = t.entry_id
LEFT JOIN members m
  ON t.author_id = m.member_id
WHERE r.contest_id IN ('CONTEST ID NUMBER')
GROUP BY
  t.title
ORDER BY
  avg_all;

Outras dicas

Toda esta mudança não é moldar a consulta original, lines314159 tem o maior volume de trabalho

SELECT aa.title,aa.avg_normal,aa.avg_judge,(aa.avg_normal + aa.avg_judge) / 2 AS avg_all
from 
(
SELECT
t.title, 
AVG(CASE WHEN group_id = '6' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value >= '4', 5, 0) END) AS avg_normal,
AVG(CASE WHEN group_id = '7' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value >= '4', 5, 0) END) AS avg_judge
FROM exp_rankings r
LEFT JOIN exp_weblog_titles t
  ON r.entry_id = t.entry_id
LEFT JOIN exp_members m
  ON t.author_id = m.member_id
WHERE r.contest_id IN ('22')
GROUP BY
  t.title
ORDER BY
 avg_all) as aa;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top