簡體   English   中英

如何減去從表中選擇的兩個值

[英]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';

現在我想減去這兩個查詢以獲得charIdexp.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 

SqlFiddle演示

使用自聯接。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM