Mysql查询组函数的使用无效
我的查询显示,当我想要获得平均值时,组函数的使用无效Mysql查询组函数的使用无效,mysql,sql,Mysql,Sql,我的查询显示,当我想要获得平均值时,组函数的使用无效 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`
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
需要每天摄入的碳水化合物的累积平均值通常,在SQL中进行分组时,您需要按所有非聚合函数的字段进行分组(通过聚合,我指的是总和、计数、平均值等)。 尝试将u.id、goal.what和goal.value添加到GROUPBY语句中。
有关详细信息,请阅读上的第一段。分组应将行聚集在已定义的现有字段上,而您尝试在不存在/已计算的字段上分组
日期(从\u UNIXTIME(u.create))
试试这个:
GROUP BY Cdate
由于Cdate定义为所选字段中的计算字段您不需要
GROUP By DATE(FROM_UNIXTIME(u.create)), u.id, goal.what, goal.value
我不认为有人会向右滚动那么远…尝试重新格式化。为什么要进行一半老式联接,一半新式联接?对我来说,这让我更难理解。你不能做
avg(sum())
。我不知道你想要什么,所以我不知道如何解决这个问题。示例数据和期望的结果总是有用的。mysql没有这样的限制。您可以选择所需的任何字段,无论是否分组或聚合。您确实可以。。。你不会得到合理的结果。