排序MySql查询的问题

时间:2013-06-12 17:01:04

标签: mysql

我很难想出一个查询来对结果集进行排序

请参阅http://sqlfiddle.com/#!2/02b65了解表格

每个参赛者都有三个结果,每个参赛者一个。

我希望根据以下内容对结果集进行排序:

  1. 总结果= station1 + station2 + station3
  2. 降低第3站的价值
  3. 降低第2站的价值
  4. 降低第1站的价值
  5. 我真正不想实现的解决方案是在表格中对电台进行硬编码,例如

    | id | competitior_id | value_of_station_1 | value_of_station_2 | value_of_station_3
    

    但这意味着更简单的查询只能对三个站点值的总和进行排序,然后根据上面的描述对每个站点进行排序。

    拜托,有人可以帮我吗?我很乐意重新设计表格。

2 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT (SELECT SUM(value_of_station_1+value_of_station_2+value_of_station_3) FROM results B WHERE B.id = A.id) as sum_station, A.* FROM results A ORDER BY sum_station DESC

您可以在此处查看示例:http://sqlfiddle.com/#!2/020b5/2

答案 1 :(得分:0)

根据我对你的帖子的待定评论...

每个参赛者都拥有所有电台的总成绩......如果多个参赛者之间存在“平局”,您希望第3站提供的得分最高的人排在最前面(在相同的“总成绩”中)一组竞争对手),如果相同的话,根据最高站2得分排序下一级,最后是站1得分。

select
      R.competitor_id,
      sum( R.result ) as TotalResults,
      max( case when R.Station = 3 then R.Result else 0 end ) as Station3,
      max( case when R.Station = 2 then R.Result else 0 end ) as Station2,
      max( case when R.Station = 1 then R.Result else 0 end ) as Station1
   from
      Results R
   group by 
      R.competitor_ID
   order by
      TotalResults DESC,
      Station3 DESC,
      Station2 DESC,
      Station1 DESC;

SQL Fiddle query

编辑每个问题/评论

每个电台的MAX()是因为您正在为每个竞争对手进行分组。您不希望多次计算每个站,因为您将拥有3条记录,并且您必须按所有非聚合字段进行分组(很多SQL引擎需要,有些不关心并只抓取第一个实例)。因此,当第一个记录被处理时,它会填充第1站,但是2和3是零值,你不希望它作为你的排序基础。然后当第二个记录被处理时,你有1& 2人口稠密,仍然坐在第三。因此,通过应用MAX(),您将获得每个站点的最高值...每个“0”实例及其实际结果......现在有意义吗?