在MySql中的其他列中使用新的派生列值
我有一个查询,其中有许多联接,在这种情况下,我必须在另一个计算列中使用CASE result值。但我不想使用任何嵌套查询,有什么可以实现这一点吗 也许我可以用下面的查询更好地解释 例:在MySql中的其他列中使用新的派生列值,mysql,sql,Mysql,Sql,我有一个查询,其中有许多联接,在这种情况下,我必须在另一个计算列中使用CASE result值。但我不想使用任何嵌套查询,有什么可以实现这一点吗 也许我可以用下面的查询更好地解释 例: 您的查询应如下所示: SELECT A.*, A.life * A.multiplier, A.score * A.multiplier FROM ( SELECT *, CASE WHEN extras.is_dou
您的查询应如下所示:
SELECT
A.*,
A.life * A.multiplier,
A.score * A.multiplier
FROM (
SELECT
*,
CASE
WHEN extras.is_doubled THEN 2
WHEN extras.is_normal THEN 1
ELSE 0.5
END as multiplier,
FROM
table
inner join
...
inner join
...
inner join
) A;
如果您的MySQL 8.0+版本支持CTEs,那么还有另一种方法: 额外的 选择生活,得分, 案例 当额外费用加倍时,则为2 当额外费用正常时1 其他0.5 作为乘数结束 临时演员 选择 倍增器 生命*乘数, 分数*乘数 临时演员 内部连接。。。 内部连接。。。
您必须使用嵌套查询或重复CASE语句。重复CASE将导致我最多重复10次,不是更复杂吗?那么使用嵌套查询似乎会更容易。在您的查询中,extra.is\u double将影响所有行的总和,但是我想有条件地使用extra.is_double,它只在A.life*A.multiplier,A.score*A.multiplier在子查询中时才起作用,我想是这样。还有,我想要的不是这个:@Mohammadyasin,我不认为会是这样,因为每个记录都会创建一个乘数,而每行的life和score列也会创建一个乘数。
SELECT
A.*,
A.life * A.multiplier,
A.score * A.multiplier
FROM (
SELECT
*,
CASE
WHEN extras.is_doubled THEN 2
WHEN extras.is_normal THEN 1
ELSE 0.5
END as multiplier,
FROM
table
inner join
...
inner join
...
inner join
) A;