我有一个表,其中的字段“ Transtype”是“ GAME_BET”或“ GAME_WIN”,而我必须加起来的字段“ AmountReal”作为负数(-)(如果Transtype是GAME_WIN或正数(+ )是Transtype = GAME_BET
我的查询如下:
SELECT SUM(t1.GameBet-t1.GameWin) as result from
(SELECT
if (TranType='GAME_BET',AmountReal,0 ) as GameBet,
if (TranType='GAME_WIN',-AmountReal,0) as GameWin
FROM DataFeed_test
WHERE Datetime >='2019-08-01') t1
是否有一种方法可以更快地执行此查询(要处理的行很多!),并有可能避免中间表t1?
答案 0 :(得分:2)
您可以省略子查询并直接使用条件聚合。
public function username()
{
return 'username';
}
为加快速度,在SELECT sum(CASE trantype
WHEN 'GAME_BET' THEN
amountreal
WHEN 'GAME_WIN' THEN
-amountreal
ELSE
0
END) result
FROM datafeed_test
WHERE datetime >= '2019-08-01';
上建立索引并支持datafeed_test (datetime)
子句。您也可以在WHERE
上尝试复合索引。