【问题标题】:mySQL - outputting the sum of two calculated fieldsmySQL - 输出两个计算字段的总和
【发布时间】:2014-09-20 11:44:14
【问题描述】:

我正在尝试将排名字段转换为总分。例如,我有两个字段,rank1 和 rank1。

我可以使用以下方法将这些转换为分数:

rank1, 
CASE WHEN rank1=1 THEN 10
            WHEN rank1=2 THEN  6
            WHEN rank1=3 THEN  3
            WHEN rank1=4 THEN  2
            WHEN rank1=5 THEN  1
                        ELSE  0 END  AS score1,
rank2, 
CASE WHEN rank=1 THEN 10
            WHEN rank2=2 THEN  6
            WHEN rank2=3 THEN  3
            WHEN rank2=4 THEN  2
            WHEN rank2=5 THEN  1
                        ELSE  0 END  AS score2,

但是如何输出 score1 + score2 的总和?

我试过了:

SUM(score1 + score2) AS TotalScore,

但它不喜欢它,因为 score1 和 score2 不是表中的字段。

谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:
    rank1, 
    CASE WHEN rank1=1 THEN 10
                WHEN rank1=2 THEN  6
                WHEN rank1=3 THEN  3
                WHEN rank1=4 THEN  2
                WHEN rank1=5 THEN  1
                            ELSE  0 END  AS score1,
    rank2, 
    CASE WHEN rank2=1 THEN 10
                WHEN rank2=2 THEN  6
                WHEN rank2=3 THEN  3
                WHEN rank2=4 THEN  2
                WHEN rank2=5 THEN  1
                            ELSE  0 END  AS score2,
    (CASE WHEN rank1=1 THEN 10
                WHEN rank1=2 THEN  6
                WHEN rank1=3 THEN  3
                WHEN rank1=4 THEN  2
                WHEN rank1=5 THEN  1
                            ELSE  0 END
    +
    CASE WHEN rank2=1 THEN 10
                WHEN rank2=2 THEN  6
                WHEN rank2=3 THEN  3
                WHEN rank2=4 THEN  2
                WHEN rank2=5 THEN  1
                            ELSE  0 END) as TotalScore
    

    【讨论】:

    • 我认为 sum() OP 试图使用的是 Excel 求和的保留,这实际上只是两个字段的相加,而不是像 DB sum/group by
    • 基本上在上面显示了score1和score2,我只需要能够输出score1 + score2的值。上面看起来应该可以工作,但是给出了一个语法错误,无论之前有或没有 SUM (CASE..
    • 我错过了第一个 CASE 语句的 END。我已经在解决方案中添加了它,它现在应该可以正常工作而不会引发语法错误。
    • 谢谢 - 这是我没有尝试的一件事,因为 END 在计算结束时是有道理的。它现在显示结果,但不是正确的。在一个示例中,如果 rank1 = 2 且 rank2 为 NULL,它的 TotalScore 应该为 6,但显示为 54。或者如果 rank1 = 1 和 rank,它应该显示 210 的分数,而它应该是 10。
    • 在这个例子中,它是从多行的值中得出 SUM 吗?它应该只是基于同一行中的两个字段的两个分数的总和。
    【解决方案2】:

    将 SUM() 放在 CASE 语句周围:

    SUM(CASE WHEN rank1=1 THEN 10
            WHEN rank1=2 THEN  6
            WHEN rank1=3 THEN  3
            WHEN rank1=4 THEN  2
            WHEN rank1=5 THEN  1
                        ELSE  0 END)  AS score1,
    .....
    

    【讨论】:

    • 对于不同的分数,我是否需要围绕每个 CASE 语句进行 SUM?或者只是在括号中的 CASE 语句周围加总所有分数?后者似乎更有意义,但这给了我一个语法错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2022-11-02
    • 2013-06-02
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多