我有以下疑问:
select
fooditemid,
sum(mealsize) as mealsize,
mealdate
from Phase2FoodItems
where`
userid = 190
and mealdate between
(select dietstartdate from Users where userid = 190)
and GETDATE()
group by mealdate我理解这基本上是要求SQL在没有提供足够信息的情况下向我提供数据(它不知道如何处理组中未指定的列,即sum、average等)。
不幸的是,将所有剩余的列添加到group by中并不能给出我想要的mealsize列的求和值。实际上,我得到的数据与没有sum和group by的数据完全相同。
我想我在这里遗漏了一个概念,谁能解释和/或建议一个新的sql语句,该语句将为mealdate列中的每个值获得mealsize列的总和?
发布于 2013-06-05 16:42:24
因为您使用的是Aggregate (SUM)函数,所以需要在GROUP BY子句中指定所有其他列。
select
fooditemid,
sum(mealsize) as mealsize,
mealdate
from Phase2FoodItems
where
userid = 190
and mealdate between
(select dietstartdate from Users where userid = 190)
and GETDATE()
group by mealdate, fooditemid发布于 2013-06-05 16:55:16
在select子句中不能有列,如果该列没有出现在group by子句中(即在本例中为fooditemid )。如果您希望保留fooditemid列,同时具有mealsize和,则可以在子查询中获得此和。例如:
select
outertable.fooditemid,
outertable.mealdate,
subquery.mealsize
from
Phase2FoodItems outertable
inner join
(
select sum(inner.mealsize) mealsize
from Phase2FoodItems inner
where inner.userid = 190
and inner.mealdate between
(select dietstartdate from Users where userid = 190)
and GETDATE()
group by inner.mealdate, inner.fooditemid
) subquery
on subquery.fooditemid = outer.fooditemid
where
outertable.userid = 190
and outertable.mealdate between
(select dietstartdate from Users where userid = 190)
and GETDATE()发布于 2013-06-05 16:44:09
要分组的所有列都应出现在GROUP by子句中,以便SQL Server以...其他RDBMS则更为宽松,将返回非聚集列的第一个值,而不是错误。
当您在中添加其他列时,您发现您的表达到了最细的粒度级别-您需要准确地计算出所需的粒度级别,并将这些列添加到GROUP BY和SELECT中,而不是引用SELECT中的other列。
https://stackoverflow.com/questions/16935185
复制相似问题