【问题标题】:got error in sql query with group by使用 group by 在 sql 查询中出错
【发布时间】:2013-06-29 17:55:57
【问题描述】:

我尝试运行如下 sql 查询 (mssql 2005):

select top 20 d_date, date1, date2 
from reestr_calculated 
where reestr_id=2 
group by date2 
order by date2 desc

我收到以下错误:

列“reestr_calculated.d_date”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

有人知道我该如何处理这个错误吗?

【问题讨论】:

    标签: sql sql-server sql-server-2005 group-by


    【解决方案1】:

    您按date2 分组,这意味着为每个date2 值返回一行。每个date2 值可以有多个d_datedate1 值,因此SQL 不知道为每个值返回哪些值。​​

    正如错误所说,您要么需要一个聚合函数(MAX()MIN()AVG() 等),要么在 GROUP BY 子句中包含其他列

    【讨论】:

      【解决方案2】:

      当您使用GROUP BY 时,多行会“折叠”成一行。要确定应该显示组中的哪些行,您必须使用聚合函数。

      喜欢MIN()SUM() 或其他人。

      像这样:

      select top 20 MIN(d_date), MAX(date1), date2 
      from reestr_calculated 
      where reestr_id=2 
      group by date2 
      order by date2 desc
      

      或者像这样:

      select top 20 d_date, date1, date2 
      from reestr_calculated 
      where reestr_id=2 
      group by d_date, date1, date2 
      order by date2 desc
      

      【讨论】:

        【解决方案3】:

        SELECT 中存在的所有列名必须存在于GROUP BY 中,除非您使用聚合函数。因此,在 group by 中也添加 date1。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 2015-09-14
          • 1970-01-01
          相关资源
          最近更新 更多