Нужно отфильтровать список с помощью max () - PullRequest
0 голосов
/ 13 ноября 2018

Дело в том, что я пытаюсь создать таблицу, которая отображает только максимальное количество голосов для данного кандидата.Для этого нужно было объединить три разных таблицы (это на испанском) Sedes, Candidatos и Voto.Я дошел до того, что, выполняя следующие строки, я получаю список со всем общим количеством голосов на кандидата на каждую презентацию:

SELECT sedes.nombresede, candidatos.apellido & ", " & candidatos.nombre AS Candidato, count(voto.numcandidato) AS TOTAL
From (Voto INNER JOIN Sedes ON Sedes.sede_id=Voto.sede_id) 
INNER JOIN Candidatos ON Voto.numcandidato=Candidatos.numcandidato
GROUP BY nombresede, candidatos.apellido & ", " & candidatos.nombre

Теперь это не мой конечный продукт, мне нужнодля списка, чтобы показать мне только кандидата в каждом учреждении, которое получило максимальное количество голосов.Я попытался сделать это:

SELECT sedes.nombresede, candidatos.apellido & ", " & candidatos.nombre AS Candidato, count(voto.numcandidato) AS TOTAL
From (Voto INNER JOIN Sedes ON Sedes.sede_id=Voto.sede_id) 
INNER JOIN Candidatos ON Voto.numcandidato=Candidatos.numcandidato
GROUP BY nombresede, candidatos.apellido & ", " & candidatos.nombre
HAVING max(TOTAL)

Но при выполнении, доступ подсказывает мне дать значение TOTAL, как при использовании предложения параметров.Как видите, я также столкнулся с проблемой при попытке использовать Candidato внутри GROUP BY и обошел его, скопировав точное выражение, использованное в предложении SELECT.Может быть, это как-то связано с другой проблемой?

Большое, большое спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Рассмотрите возможность запуска агрегата, а затем коррелированного подзапроса для ранжирующей переменной кандидатов в каждом заведении. Затем выберите все записи с помощью rank = 1:

Вспомогательный запрос (сохранить как объект запроса, на который будут ссылаться ниже)

SELECT s.nombresede, c.apellido & ', ' & c.nombre AS Candidato, 
       COUNT(voto.numcandidato) AS TOTAL
FROM (Voto v 
INNER JOIN Sedes s ON s.sede_id = v.sede_id) 
INNER JOIN Candidatos c ON c.numcandidato = v.numcandidato
GROUP BY s.nombresede, c.apellido & ', ' & c.nombre

Окончательный запрос

SELECT m.nombresede, m.Candidato, m.[rank]
FROM
   (SELECT q.nombresede, q.Candidato,
          (SELECT COUNT(*)
           FROM myHelperQuery sub
           WHERE sub.nombresede = q.nombresede
             AND sub.TOTAL >= q.TOTAL) AS [rank]
    FROM myHelperQuery q
   ) AS m
WHERE m.[rank] = 1
0 голосов
/ 13 ноября 2018

Ваш TOTAL не определен. Таким способом нельзя использовать псевдоним. Таким образом, Max() пытается оценить, но Access не знает, какой у вас TOTAL, поэтому он запрашивает ввод. Этот должен сделать трюк:

SELECT sedes.nombresede, candidatos.apellido & ", " & candidatos.nombre AS Candidato, count(voto.numcandidato) AS total, Max(voto.numcandidato) AS maximum
From (Voto INNER JOIN Sedes ON Sedes.sede_id=Voto.sede_id) 
INNER JOIN Candidatos ON Voto.numcandidato=Candidatos.numcandidato
GROUP BY nombresede, candidatos.apellido & ", " & candidatos.nombre
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...