通过 MYSQL 查询减去值
Subtracting values via MYSQL query
快速提问我现在无法理解:
我有一个table,叫"liverace",如下(节选):
racelap,pos,change,userid
1 1 0 21
1 2 0 12
1 3 0 18
2 1 0 18
2 2 0 21
2 3 0 12
基本上,我有几圈被列为 racelap,每个用户(有自己独特的 "userid")根据一些微积分获得分配的位置("pos")。
我在这里需要做的是让 "change" 列在每一圈和每个用户中更新以反映位置的变化。
所以我必须比较每一圈和每个用户的每个位置,即它应该显示:
racelap,pos,change,userid
1 1 - 21
1 2 - 12
1 3 - 18
2 1 +2 18
2 2 -1 21
2 3 -1 12
第一圈没有变化,因为第 0 圈不存在。第 2 圈应该显示位置的变化。
我一直在尝试一些选择,但没有任何效果。
提前致谢!
SELECT
so1.`lap`,
so1.`pos`,
COALESCE(so2.pos - so1.pos, "-") as `change`,
so1.user_id
FROM
so so1
LEFT JOIN so so2
ON so2.lap = (so1.`lap` - 1)
AND so2.`user_id` = so1.`user_id`
按预期工作。
lap pos change user_id
------ ------ ------ ---------
1 1 - 21
1 2 - 12
1 3 - 18
2 1 2 18
2 2 -1 21
2 3 -1 12
假设如下
CREATE TABLE `so` (
`lap` int(11) DEFAULT NULL,
`pos` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL
) ENGINE=InnoDB
快速提问我现在无法理解:
我有一个table,叫"liverace",如下(节选):
racelap,pos,change,userid
1 1 0 21
1 2 0 12
1 3 0 18
2 1 0 18
2 2 0 21
2 3 0 12
基本上,我有几圈被列为 racelap,每个用户(有自己独特的 "userid")根据一些微积分获得分配的位置("pos")。 我在这里需要做的是让 "change" 列在每一圈和每个用户中更新以反映位置的变化。 所以我必须比较每一圈和每个用户的每个位置,即它应该显示:
racelap,pos,change,userid
1 1 - 21
1 2 - 12
1 3 - 18
2 1 +2 18
2 2 -1 21
2 3 -1 12
第一圈没有变化,因为第 0 圈不存在。第 2 圈应该显示位置的变化。
我一直在尝试一些选择,但没有任何效果。 提前致谢!
SELECT
so1.`lap`,
so1.`pos`,
COALESCE(so2.pos - so1.pos, "-") as `change`,
so1.user_id
FROM
so so1
LEFT JOIN so so2
ON so2.lap = (so1.`lap` - 1)
AND so2.`user_id` = so1.`user_id`
按预期工作。
lap pos change user_id
------ ------ ------ ---------
1 1 - 21
1 2 - 12
1 3 - 18
2 1 2 18
2 2 -1 21
2 3 -1 12
假设如下
CREATE TABLE `so` (
`lap` int(11) DEFAULT NULL,
`pos` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL
) ENGINE=InnoDB