在同一语句中JOIN,ORDER BY和GROUP BY

时间:2017-07-05 19:20:31

标签: mysql sql join group-by sql-order-by

我有两张桌子 - 结果和参赛者。结果表币表

  • result_id(PK)
  • resul_contestant(谁得分)
  • 价值(他得分多少)
  • result_discipline(他得分的地方)

参赛者表格币

  • contestant_id(PK)
  • contestant_name
  • contestant_category

我想要做的是为所有参赛者选择结果,但我只希望每位参赛者显示一个结果 - 最高(最低)。 到目前为止,我设法做到了这一点:

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来实现。 感谢。

1 个答案:

答案 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()

相关问题