Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySql中的其他列中使用新的派生列值_Mysql_Sql - Fatal编程技术网

在MySql中的其他列中使用新的派生列值

在MySql中的其他列中使用新的派生列值,mysql,sql,Mysql,Sql,我有一个查询,其中有许多联接,在这种情况下,我必须在另一个计算列中使用CASE result值。但我不想使用任何嵌套查询,有什么可以实现这一点吗 也许我可以用下面的查询更好地解释 例: 您的查询应如下所示: SELECT A.*, A.life * A.multiplier, A.score * A.multiplier FROM ( SELECT *, CASE WHEN extras.is_dou

我有一个查询,其中有许多联接,在这种情况下,我必须在另一个计算列中使用CASE result值。但我不想使用任何嵌套查询,有什么可以实现这一点吗

也许我可以用下面的查询更好地解释 例:


您的查询应如下所示:

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;