我有一个MySQL表,当用户通过凭证付款时,它会在数据库中记录值。它记录凭证值。我需要获得凭证金额细分的所有凭证价值的总和。我目前的查询如下。但是,butchery_class_voucher_155
和butchery_class_voucher_135
始终返回为0.
请帮助解决这个问题。
select
case
when voucher_value = '155.00'
then round(sum(voucher_value/1.2), 2)
else 0.00 end
as butchery_class_voucher_155,
case
when voucher_value = '10.00'
then round(sum(voucher_value/1.2), 2)
else 0.00 end
as shop_voucher,
case when voucher_value = '135.00'
then round(sum(voucher_value/1.2), 2)
else 0.00 end
as butchery_class_voucher_135,
ifnull(round(sum(final_price/1.2), 2),0.00) as paidbycard,
ifnull(round(sum(transfer_fee/1.2), 2),0.00) as transfer_fee
from `bookings`
where `location_id` = 6
答案 0 :(得分:2)
这是失败的原因是由于您设置案例陈述的方式。如果voucher_value等于某个值,或者给你零,你已经写了一个查询给你总和。在查询分析的最后一行,它只会比较该凭证值,其他的将返回0。
要解决此问题,您需要调整public float delay = 1.0f;
private float timer = 0;
void Update()
{
Vector3[] latestPositions;
Quaternion[] latestOrientations;
timer += Time.deltaTime;
if (timer >= delay)
{
if (mvnActors.getLatestPose(actorID-1, out latestPositions, out latestOrientations))
{
updateMvnActor(currentPose, latestPositions, latestOrientations);
updateModel(currentPose, targetModel);
}
timer = 0;
}
}
函数以在值匹配的情况下添加凭证值,否则添加0:
SUM()
等等。
答案 1 :(得分:2)
问题是你在一个案例中有sum()调用,即使case(或ifs)应该在sum()中。使用当前代码,如果第一条记录的voucher_value为10,那么只有shop_voucher表达式会为您提供除零之外的任何结果。
select
round(sum(if(voucher_value=155,voucher_value/1.2,0)), 2) as butchery_class_voucher_155,
...
from `bookings`
where `location_id` = 6
你还需要考虑一件事:你究竟在哪里放置了舍入函数。您可以先对结果求和,然后将其舍入(这是我上面的代码中使用的),或者您可以在每个部门应用舍入。