我有两张桌子 - 结果和参赛者。结果表币表
参赛者表格币
我想要做的是为所有参赛者选择结果,但我只希望每位参赛者显示一个结果 - 最高(最低)。 到目前为止,我设法做到了这一点:
SELECT * FROM contenstants
JOIN results ON result_contestant = contenstant_id
WHERE result_discipline = 1 AND contestant_category = 1
ORDER BY value DESC
GROUP BY contenstant_id;
然而,这给了我语法错误。如果我删除了GROUP BY行,我从最高级别获得了结果,但是如果任何一个参赛者在这个学科中得分不止一次,我得到了他所有的分数。
如果我删除ORDER BY行,每个参赛者只获得一个结果,但它返回db中的第一条记录,而不是最高记录。
如何修复此命令才有效?此外,还有一些less_is_better规则,我希望得分最低,但就最终查询而言,我可以使用ORDER BY,它应该通过用ASC替换DESC来实现。 感谢。
答案 0 :(得分:1)
请勿使用group by
。将select *
与group by
一起使用是没有意义的。而是使用过滤器来获取所需的行:
SELECT *
FROM contenstants c JOIN
results r
ON r.result_contestant = c.contestant_id
WHERE r.result_discipline = 1 AND c.contestant_category = 1 AND
r.value = (select min(r2.value)
from results r2
where r2.result_contestant = r.result_contestant and
r2.result_discipline = r.result_discipline
)
ORDER BY value DESC;
注意:我不确定子查询中是否需要min()
或max()
。