首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server中具有group by的选择列表中的列无效

SQL Server中具有group by的选择列表中的列无效
EN

Stack Overflow用户
提问于 2013-06-05 16:38:02
回答 4查看 1.8K关注 0票数 0

我有以下疑问:

代码语言:javascript
复制
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列的总和?

EN

回答 4

Stack Overflow用户

发布于 2013-06-05 16:42:24

因为您使用的是Aggregate (SUM)函数,所以需要在GROUP BY子句中指定所有其他列。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-06-05 16:55:16

在select子句中不能有列,如果该列没有出现在group by子句中(即在本例中为fooditemid )。如果您希望保留fooditemid列,同时具有mealsize和,则可以在子查询中获得此和。例如:

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2013-06-05 16:44:09

要分组的所有列都应出现在GROUP by子句中,以便SQL Server以...其他RDBMS则更为宽松,将返回非聚集列的第一个值,而不是错误。

当您在中添加其他列时,您发现您的表达到了最细的粒度级别-您需要准确地计算出所需的粒度级别,并将这些列添加到GROUP BY和SELECT中,而不是引用SELECT中的other列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16935185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档