2016-05-29 47 views
1

问题:Mysql的问题与组由两列

我有一些比赛结果的表。对于每辆车,有两名车手分别获胜。为了便于工作,我为每辆车创建了一行表格(所以两个驱动程序分为两列:driver1,driver2),而不是每个驱动程序一个,因为除了驱动程序之外,所有其他列的值都相同每辆车。

例子:

+------+-----+---------+---------+--------+ 
| race | car | driver1 | driver2 | points | + other variables with same value for both drivers 
+------+-----+---------+---------+--------+ 
| GER | 1 | Michael | Rick | 20 | 
| GER | 2 | Steve | Tom  | 8 | 
| JAP | 1 | Michael | Josh | 20 | 
| JAP | 2 | Steve | Tom  | 8 | 
+------+-----+---------+---------+--------+ 

正如你可以看到有两个以上的驱动车号1.所以,当我希望看到每个驱动程序在两站比赛的总得分,这应该是结果:

  1. 迈克尔:40
  2. 里克:20
  3. 乔希:20
  4. 史蒂夫:16
  5. 汤姆:16

但我怎么组的得分为每个驱动程序处理的驱动(驱动1和驱动2)的两列?或者我只需要更改我的表格并为每个驱动程序创建一行?

$sql = "SELECT race, driver1, driver2, points FROM `example-table` GROUP BY ………. ORDER BY `points` DESC"; 

回答

1

您可以使用union all运营商查询司机一列,然后group by司机和sum点:

SELECT driver, SUM(points) 
FROM  (SELECT driver1 AS driver, points FROM example_table 
      UNION ALL 
      SELECT driver2 AS driver, points FROM example_table) t 
GROUP BY driver 
ORDER BY 2 DESC 
+1

正是我需要的。谢谢! – Stan

1
SELECT driver, SUM(points) as points 
FROM 
    (SELECT driver1 as driver, points 
    FROM `example-table` 
    UNION ALL 
    SELECT driver2 as driver, points 
    FROM `example-table`)T 
GROUP BY driver