我的查询显示当我想获得平均值时无效使用群组功能
SELECT u.id,
TRUNCATE(AVG(SUM(m.carbs) /
( SUM(m.carbs) + SUM(m.fat) + SUM(m.protein) )), 2),
DATE(FROM_UNIXTIME(u.create)) AS Cdate,
goal.what,
goal.value
FROM `meal` AS m,
`user_history` AS u
LEFT JOIN goal
ON goal.what = 'Carbs'
AND goal.user_id = 50
WHERE u.meal_id = m.id
AND u.user_id = 50
GROUP BY DATE(FROM_UNIXTIME(u.create))
示例数据
餐桌Id carbs fat protein
4 10 30 18
6 17 4 2
用户历史记录表
Id mealid date
1 4 20014-07-21
2 6 20014-07-21
需要每天摄取碳水化合物的累计平均值
答案 0 :(得分:0)
通常在SQL中进行分组时,您需要按非聚合函数的所有字段进行分组(通过聚合,我指的是SUM,COUNT,AVG等)。 尝试将u.id,goal.what和goal.value添加到GROUP BY语句中。 阅读this page上的第一段以获取更多信息。
答案 1 :(得分:0)
分组应该在已定义的现有字段上聚合您的行,而您尝试对不存在/计算的字段进行分组DATE(FROM_UNIXTIME(u.create))
试试这个:
GROUP BY Cdate
因为Cdate被定义为所选字段中的计算字段
答案 2 :(得分:0)
你不需要吗
GROUP By DATE(FROM_UNIXTIME(u.create)), u.id, goal.what, goal.value