[英]How can I subtract two values selected from a table
我有一個MySQL表,像這樣:
CREATE TABLE IF NOT EXISTS `ladderStandard` (
`charId` mediumint(8) unsigned NOT NULL,
`poeRank` smallint(5) unsigned NOT NULL,
`lvl` tinyint(3) unsigned NOT NULL,
`exp` int(10) unsigned NOT NULL,
`ladderTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `ladderStandard` (`charId`, `poeRank`, `lvl`, `exp`, `ladderTime`) VALUES
(10000, 10000, 91, 2108226870, '2015-02-06 23:37:11'),
(10001, 10001, 91, 2108221545, '2015-02-06 23:37:11'),
(10002, 10002, 91, 2108219833, '2015-02-06 23:37:11'),
(10003, 10003, 91, 2108192924, '2015-02-06 23:37:11'),
(10004, 10004, 91, 2108154502, '2015-02-06 23:37:11'),
(10005, 10005, 91, 2108153763, '2015-02-06 23:37:11'),
(10000, 9998, 91, 2108226870, '2015-02-06 23:58:21'),
(10001, 9999, 91, 2108221545, '2015-02-06 23:58:21'),
(10002, 10000, 91, 2108219833, '2015-02-06 23:58:21'),
(10003, 10001, 91, 2108192924, '2015-02-06 23:58:21'),
(10004, 10002, 91, 2108154502, '2015-02-06 23:58:21'),
(10005, 10003, 91, 2108153763, '2015-02-06 23:58:21'),
我有兩個查詢:
SELECT charId, exp FROM ladderStandard WHERE ladderTime = '2015-02-06 23:37:11';
SELECT charId, exp FROM ladderStandard WHERE ladderTime = '2015-02-06 23:58:21';
現在我想減去這兩個查詢以獲得charId
和exp.from.first.query
- exp.from.second.query
這是sqlfiddle.com上的示例 。
您需要同時加入兩個查詢,然后進行數學運算
SELECT a.charid,
a.exp - b.exp
FROM (SELECT charId,
exp
FROM ladderStandard
WHERE ladderTime = '2015-02-06 23:37:11') a
JOIN (SELECT charId,
exp
FROM ladderStandard
WHERE ladderTime = '2015-02-06 23:58:21') b
ON a.charid = b.charid
使用自聯接。 WHERE
子句將表的每個子集限制為特定時間, ON
子句鏈接相應的行。
SELECT a.charid, a.exp - b.exp AS diff
FROM ladderStandard AS a
JOIN ladderStandard AS b ON a.charid = b.charid
WHERE a.ladderTime = '2015-02-06 23:37:11'
AND b.ladderTime = '2015-02-06 23:58:21'
在示例數據中,兩組中相同ID的exp
值相同。 因此從另一個減去一個只會得到零。
但是,假設您的實際數據具有不同的值,這是一種無需連接表即可執行操作的方法。
SELECT CharId,
Sum( case LadderTime
when :SecondDate then exp
else -exp end )as SumExp
FROM LadderStandard
where LadderTime in( :FirstDate, :SecondDate )
group by CharID;
不出所料,此SQL Fiddle顯示了所有零,但CharID
= 10291除外,后者在第二組中有一個條目,但在第一組中沒有。 在這種情況下,計算結果為0 - exp.from.second.query
,它只是exp
值的負數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.