gpt4 book ai didi

mysql - Mysql 上的嵌套条件语句

转载 作者:行者123 更新时间:2023-11-29 12:43:08 25 4
gpt4 key购买 nike

我正在 phpmyadmin mysql 上开发一个查询,其中我打算显示“CurrentBalance”列的运行余额

此栏的运行余额取决于事件何时为存款 (+)、提款 (-)、投注 (-)、支付 (+)

我想到的是这个

SELECT CONCAT("Trans ID ",`TransactionID`) AS ID, 
`DateTime`,`Type` AS Activity, `Amount`, 0 AS Payout,
CASE WHEN (SELECT Activity) = "deposit" THEN `Amount`+ `playerdb`.`CurrentBalance`
ELSE CASE WHEN (SELECT Activity) = "withdraw" OR (SELECT Activity) = "bet"
THEN CASE WHEN (SELECT Payout) >0 THEN (SELECT Payout) + `playerdb`.`CurrentBalance`
ELSE `Amount` - `playerdb`.`CurrentBalance` END END END AS CurrentBalance
FROM `transactiondb` LEFT JOIN `playerdb` ON
`transactiondb`.`PlayerID` = `playerdb`.`PlayerID`
WHERE `transactiondb`.`PlayerID`=10078 UNION ALL
SELECT CONCAT("Bet ID ",`BetID`),`DateTime`,"Bet", `BetAmount`,`Payout`, (SELECT CurrentBalance) FROM `betdb` WHERE `PlayerID`=10078 ORDER BY `DateTime`

这个想法 http://postimg.org/image/x3fsxq2qz/

在第二个 SELECT 语句上执行 (SELECT CurrentBalance) 会产生此错误

1054 - “字段列表”中存在未知列“CurrentBalance”

我需要获取上一条记录的 CurrentBalance,因此我尝试使用别名

这可能吗?

最佳答案

这是一个“授人以鱼……”的答案,因为我还没有完全弄清楚你的问题。

一般来说,您可以使用变量访问上一行。

看看这个例子:

SELECT
t.*
, @running_total := IF(@foo != foo, 0, @running_total + bar)
, @foo := foo
FROM a_table t
, (SELECT @running_total := 0, @foo := NULL) variable_initialization_subquery
ORDER BY foo;

正如子查询别名所暗示的,这里

, (SELECT @running_total := 0, @foo := NULL) variable_initialization_subquery

我们初始化变量。

我们ORDER BY foo因为如果您没有明确指定,数据库中的数据就没有可靠的顺序。

然后是SELECT子句被视为一列接着一列。这里列的顺序也很重要。

首先我们这样做:

, @running_total := IF(@foo != foo, 0, @running_total + bar)

这将计算每个 foo 的运行总计。 。当 foo更改后,运行总计将重置为 0。IF()函数的工作原理类似于 IF(<boolean condition>, <then>, <else>) .
这里的变量 @foo仍然具有前一行的值。当前行的值在此行中分配:

, @foo := foo

希望您能明白,如果有任何不清楚的地方,请随时询问。哦,你不需要那些select位于 case...when...零件。

关于mysql - Mysql 上的嵌套条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com