假设我有一个假设的表格,以便某些游戏中的某些玩家得分时记录:
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)
但如果您的玩家列表是动态的,这将无效.
在纯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的布尔评估作为1对true与0对false,让您乘测试的真相与数字列.我已经多次使用它了"枢轴",我喜欢简洁.
球员的名字都是预先知道的吗?如果是这样,你可以这样做:
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。
| 归档时间: |
|
| 查看次数: |
16355 次 |
| 最近记录: |