Mysql如何根据列其他表选择SUM

时间:2016-12-16 21:44:33

标签: mysql

在我需要的地方使用这个应用程序进行一个似乎不可能的查询(经过几个小时的尝试和尝试)。

虽然,我不得不承认,我对查询有点生疏!

无论如何,我们假设有这三个表:

膳食

id name
-- ----  
1  meal1 

食品

id name  kcal kj
-- ----  ---- --
1  food1 200  200
2  food2 300  300

Meal_food

m_id f_id percentage_food_in_meal
---- ---- ----
1    1    0.60
1    2    0.40

我想要选择的是:一顿饭,kcal(和其他人)属于这顿饭基于的百分比。

正如我尝试过的那样,我已经尝试过,但我可以告诉你我能得到的最接近的地方:

SELECT 
  m.*, 
  SUM(f.kj),    -- <- should be based on the percentage
  SUM(f.kcal)   -- <- should be based on the percentage
FROM 
  meal m, 
  meal_food mf, 
  food_nl f
WHERE 
  m.id = mf.meal_id
AND 
  f.id = mf.food_id
GROUP BY 
  m.id;

正如评论所说:基于百分比的缺失。 尝试了内连接,外连接,交叉连接,子查询,所以我想知道它是否可能。

希望我关于我想要获得的内容的问题很明确,如果不是,我会很乐意再次尝试!

更新 例如作为输出:

id name  kcal kj
-- ----  ---- --- 
1  meal1 240  240

澄清: meal1由2种食物(成分)组成:

  • 总餐kcal == 60%kcal food1 + 40%kcal food2
  • 总餐kj == 60%kj food1 + 40%kj food2

1 个答案:

答案 0 :(得分:1)

未经测试:

SELECT 
  m.id, MIN(m.name) AS meal_name, 
  SUM(f.kj*mf.percentage_food_in_meal),  
  SUM(f.kcal*percentage_food_in_meal)
FROM meal m 
INNER JOIN  meal_food mf
ON m.id = mf.meal_id
INNER JOIN food_nl f
ON f.id = mf.food_id
GROUP BY m.id;