【问题标题】:MySQL Summing with an algebraic expression for every rowMySQL Summing,每行都有一个代数表达式
【发布时间】:2012-05-16 01:46:36
【问题描述】:

让我们开始吧。

这会返回正确的结果:

SELECT sum(w.weight * w.repetitions)
FROM workout_exercise_logs w
JOIN workout_logs wo ON `w`.`workoutLogID`=`wo`.`workoutLogID`
JOIN workouts wor ON `wo`.`workoutID`=`wor`.`workoutID`
WHERE w.weightType=1 and `wor`.`userID`=34

但是当我添加+ w.weight * w.seconds / 3 时,我得到一个NULL 结果:

SELECT sum(w.weight * w.repetitions + w.weight * w.seconds / 3)
FROM workout_exercise_logs w
JOIN workout_logs wo ON `w`.`workoutLogID`=`wo`.`workoutLogID`
JOIN workouts wor ON `wo`.`workoutID`=`wor`.`workoutID`
WHERE w.weightType=1 and `wor`.`userID`=34

表达式有什么问题,我该如何解决?谢谢!

【问题讨论】:

    标签: mysql select sum


    【解决方案1】:

    一个问题,你是否真的需要这个字段可以为空(或任何相关的字段):秒?

    如果这是一个要求,您需要将那些可为空的字段合并为零:

    SELECT sum(
          w.weight * w.repetitions 
          + w.weight * coalesce(w.seconds,0) / 3)
    FROM workout_exercise_logs w
    JOIN workout_logs wo ON `w`.`workoutLogID`=`wo`.`workoutLogID`
    JOIN workouts wor ON `wo`.`workoutID`=`wor`.`workoutID`
    WHERE w.weightType=1 and `wor`.`userID`=34
    

    【讨论】:

    • 你也可以使用 IFNULL 代替 coalesce。
    • @MajidTaheri 谢谢,我无法立即回忆起该函数名称。我知道在 Sql Server 中,它是 ISNULL。但我当然知道,coalesce 几乎适用于所有数据库平台ツ
    • 是的 IFNULL 在 MySQL 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多