使用MySQL查询选择多个和,并将它们显示在单独的列中

Sem*_*Fly 12 mysql sql pivot

假设我有一个假设的表格,以便某些游戏中的某些玩家得分时记录:

name   points
------------
bob     10
mike    03
mike    04
bob     06
Run Code Online (Sandbox Code Playgroud)

如何获得每个玩家的分数总和并在一个查询中并排显示?

总积分表

bob   mike
16     07
Run Code Online (Sandbox Code Playgroud)

我的(伪)查询是:

SELECT sum(points) as "Bob" WHERE name="bob",
       sum(points) as "Mike" WHERE name="mike"
  FROM score_table
Run Code Online (Sandbox Code Playgroud)

man*_*nji 18

您可以"手动"转动数据:

SELECT SUM(CASE WHEN name='bob' THEN points END) as bob,
       SUM(CASE WHEN name='mike' THEN points END) as mike
  FROM score_table
Run Code Online (Sandbox Code Playgroud)

但如果您的玩家列表是动态的,这将无效.


Boh*_*ian 7

在纯sql中:

SELECT
    sum( (name = 'bob') * points) as Bob,
    sum( (name = 'mike') * points) as Mike,
    -- etc
FROM score_table;
Run Code Online (Sandbox Code Playgroud)

这家整洁的解决方案的工作,因为MySQL的布尔评估作为1true0false,让您测试的真相与数字列.我已经多次使用它了"枢轴",我喜欢简洁.


rub*_*olo 5

球员的名字都是预先知道的吗?如果是这样,你可以这样做:

SELECT SUM(CASE WHEN name = 'bob'  THEN points ELSE 0 END) AS bob,
       SUM(CASE WHEN name = 'mike' THEN points ELSE 0 END) AS mike,
       ... so on for each player ...
  FROM score_table
Run Code Online (Sandbox Code Playgroud)

如果不这样做,您仍然可以使用相同的方法,但您可能必须动态构建查询。基本上,您会SELECT DISTINCT name ...,然后使用该结果集来构建每个CASE语句,然后执行结果 SQL。