【问题标题】:Mysql issue with group by two columns两列分组的Mysql问题
【发布时间】:2016-05-29 15:48:10
【问题描述】:

问题:

我有一张表格,上面有一些比赛结果。每辆车有两名车手分别赢得积分。为了方便工作,我为每辆车创建了一个表格(因此在两列中有两个司机: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";

【问题讨论】:

    标签: mysql sql select group-by


    【解决方案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
    

    【讨论】:

    • 正是我需要的。谢谢!
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多