Mysql SUM case返回不带GROUP BY的值

Mysql SUM case返回不带GROUP BY的值,mysql,sql,group-by,sum,case,Mysql,Sql,Group By,Sum,Case,当我在case select周围添加SUM时,它返回不带groupby的求和值 我使用的查询(不包括总和)如下所示 SELECT CASE WHEN subscription_types.type = 'Succes lidmaatschap' THEN 7 ELSE 8 END FROM subscription_used INNER JOIN training_sessions ON training_sessions.id = subscription_used.training_se

当我在case select周围添加SUM时,它返回不带groupby的求和值

我使用的查询(不包括总和)如下所示

SELECT CASE WHEN subscription_types.type  = 'Succes lidmaatschap' THEN 7 ELSE 8 END FROM subscription_used
INNER JOIN training_sessions ON  training_sessions.id = subscription_used.training_session_id
INNER JOIN training_series AS tserie ON tserie.id = training_sessions.training_serie_id
INNER JOIN user_training_session ON user_training_session.training_session_id = training_sessions.id
INNER JOIN subscriptions ON subscriptions.id = subscription_used.subscription_id
INNER JOIN subscription_types ON subscription_types.id = subscriptions.subscription_type_id
WHERE subscription_used.training_session_id =  (SELECT training_sessions.id FROM training_sessions WHERE DATE(event_start_date) = @week_2_ago_date AND training_serie_id = 17) AND present=1
GROUP BY subscriptions.id
此查询返回值:8,7。然而,当我在箱子周围加一个总数时,它给了我75。75是在没有GROUP BY的情况下返回的值的总和


有没有办法解决这个问题,以便查询给我正确的值8+7=15,1行?提前感谢

Group by基于subscription.id表示不同的值,因此,如果您随身携带该组,由于连接等原因,您可能会得到类似于8,8,8,8,7,7,7,7的值

使用group by只能得到8和7的不同值。当您与组进行求和时,它将对所有组进行求和,尽管不是2个不同的组

最简单的解决方案将为您提供15:

SELECT SUM(SUBSCRIPTION_USED) FROM (
SELECT CASE WHEN subscription_types.type  = 'Succes lidmaatschap' THEN 7 ELSE 8 END FROM subscription_used
INNER JOIN training_sessions ON  training_sessions.id = subscription_used.training_session_id
INNER JOIN training_series AS tserie ON tserie.id = training_sessions.training_serie_id
INNER JOIN user_training_session ON user_training_session.training_session_id = training_sessions.id
INNER JOIN subscriptions ON subscriptions.id = subscription_used.subscription_id
INNER JOIN subscription_types ON subscription_types.id = subscriptions.subscription_type_id
WHERE subscription_used.training_session_id =  (SELECT training_sessions.id FROM training_sessions WHERE DATE(event_start_date) = @week_2_ago_date AND training_serie_id = 17) AND present=1
GROUP BY subscriptions.id);
不过,一般来说,这可能是一种更好的写作方式


编辑:你也可以这样做。。。。。。如果您只想对不同的值求和。

应该返回什么?应该返回的值是group by的和,它是8+7=15也给了我们一些数据,以便我们能够准确地计算出发生了什么UMDISTINCT情况….?您是否尝试过将所有内容都放在一个SELECT SUM1 FROM中。。。但是,当我尝试在子查询中使用它时,我将替换并训练_serie_id=17 to和训练_serie_id=tserie_id,但它找不到tserie表。此tserie表是子查询内部JOIN training_系列外部的别名,名为tserie ON tserie.id=session.training_serie_id是否有办法解决此问题?您已经在training_session.training_serie_id外部加入了tserie.id。也许您正在寻找更多信息?:从“选择不同的订阅ID”中选择订阅ID、SUMVAL,当订阅类型为'successs lidmaatschap'时,则7个或8个结束为订阅中的VAL\u使用的内部加入订阅对订阅进行的订阅。id=订阅类型为'u使用的。订阅类型为'id内部加入订阅对订阅进行的订阅类型为'id=订阅。订阅类型为'id内部加入培训课程对培训课程进行的培训课程。id=subscription\u used.training\u session\u id INNER JOIN user\u training\u session.training\u session\u id=training\u sessions.id INNER JOIN training\u serie\u id WHERE date training\u sessions.event\u开始日期=@week\u 2\u ago日期和当前日期=1组订阅日期;