问题是,我正在尝试创建一个仅显示给定候选人的最大票数的表。为此,需要组合三个不同的表(此表为西班牙语)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
赋值,就像使用parameters子句时一样。如您所见,当尝试在Candidato
内使用GROUP BY
时,我也遇到麻烦,并且通过复制SELECT
子句中使用的精确表达式来解决该问题。也许这与另一个问题有关?
非常感谢您的帮助!
答案 0 :(得分:0)
您的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
答案 1 :(得分:0)
请考虑先运行汇总,然后进行相关子查询以查找每个机构下的候选人的排名变量。然后,用rank = 1
选取所有记录:
Helper Query (另存为要在下面引用的查询对象)
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