MySQL计算选择查询中的差异

时间:2014-12-29 21:59:32

标签: php mysql select difference

我想知道是否可以在选择查询中进行基本数学运算。说我有下表

+----------+----------+
| name     |   score  |
+----------+----------+
| Person 1 |     5    |
+----------+----------+
| Person 1 |     8    |
+----------+----------+
| Person 1 |     3    |
+----------+----------+
| Person 2 |     7    |
+----------+----------+
| Person 1 |     9    |
+----------+----------+

目前我正在使用以下内容获取数据。

SELECT * FROM my_table WHERE name='Person 1'

我想选择所有数据,但也包括一个得分差异列(考虑WHERE子句),所以结果会像

+----------+----------+------------+
| name     |   score  | difference |
+----------+----------+------------+
| Person 1 |     5    |      0     |
+----------+----------+------------+
| Person 1 |     8    |      3     |
+----------+----------+------------+
| Person 1 |     3    |      -5    |
+----------+----------+------------+
| Person 1 |     9    |      6     |
+----------+----------+------------+

只用一个选择查询就可以实现这个目的吗?

由于

2 个答案:

答案 0 :(得分:2)

SELECT   
  u.name, 
  u.score, 
  IFNULL((u.score - (SELECT score FROM users WHERE id = @previd)), 0) as difference,
  @prevId := u.id as id
FROM    users u, (SELECT @previd :=0) c
WHERE name = "Person 1"

SQL FIDDLE

通过上述查询,您可以ORDER BY任意列。

答案 1 :(得分:0)

首先,您需要在表中添加一个增量列。在我的例子中,它被称为(没有惊喜)' id'。它是一种自动增量。你当前的表看起来没有可能的主键,所以自动增量列无论如何都是个好主意。

此解决方案使用一些简单的子选择来获得最大的id,该id小于您选择的当前行的id,即“之前的”#。行。从那里它的简单减法得到分数差异。

select a.id, 
       a.name, 
       a.score, 
       a.score-(select   score  
                from     my_table 
                where    id=(select   max(id) 
                             from     my_table 
                             where    id<a.id 
                             and      name="person 1")) as difference 
from   my_table a 
where  name="person 1";

希望这可以解决问题!