sql汇总

7rtdyuoh  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(338)

sql新手在这里,我卡住了一个问题。
我有一个配方配料表,基本上我想做的是找到一个配方的价格四舍五入到整个配料。
所以我写了这个sql。

select recipe_id_label, recipe_name, variation_name, portion_size, menu_id, variation_name,
sum (recipe_order_ingredient_quantity * ingredient_expected_cost)
from mb.weekly_menus_recipes_ingredients
where recipe_id_label = '30943'
and portion_size = '2'
group by recipe_id_label, recipe_name, variation_name, portion_size, menu_id, variation_name

这是有趣的部分。

sum (recipe_order_ingredient_quantity * ingredient_expected_cost)

这个sql得到了正确的答案,只要没有半成分。例如,如果你有0,25包胡萝卜,它将不会四舍五入到1包。
所以我试了这个。

sum (ingredient_planned_cost* ceiling (recipe_order_ingredient_quantity))

这也不管用。如果有两行有半个胡萝卜,那么sql将把每行加起来等于1个胡萝卜,这样它将计算两个整胡萝卜,而不是两个半胡萝卜(1)。
所以基本上我希望我的代码能够理解一半+一半是完整的,并且理解即使只使用四分之一也需要一个完整的。

pokxtpni

pokxtpni1#

这是你想要的吗

select recipe_id_label, recipe_name, portion_size, menu_id, variation_name, 
  sum(ingcost)
from (
    select recipe_id_label, recipe_name, portion_size, menu_id, 
        variation_name, 
        ceiling(sum(recipe_order_ingredient_quantity)) * ingredient_expected_cost ingcost
    from mb.weekly_menus_recipes_ingredients
    where recipe_id_label = 30943 and portion_size = 2
    group by recipe_id_label, recipe_name, portion_size, menu_id, variation_name, 
       ingridient_id, ingredient_expected_cost
) t
group by recipe_id_label, recipe_name,  portion_size, menu_id, variation_name

使用mysql编辑检查的语法

s4chpxco

s4chpxco2#

如果我了解你的问题,你只需要使用 round 每个数量加0.5

create table T (quantity decimal(5,2));

insert into T values (0.25),(0.75),(1.5);

这将产生4

select Sum(Round(quantity+0.5,0))
from T;

相关问题