我想知道是否可以在选择查询中进行基本数学运算。说我有下表
+----------+----------+
| 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 |
+----------+----------+------------+
只用一个选择查询就可以实现这个目的吗?
由于
答案 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"
通过上述查询,您可以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";
希望这可以解决问题!