【问题标题】: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_date 或date1 值,因此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。