Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法使用having,因为它未包含在聚合函数中,但无法解决,因为缺少列_Sql_Database - Fatal编程技术网

Sql 无法使用having,因为它未包含在聚合函数中,但无法解决,因为缺少列

Sql 无法使用having,因为它未包含在聚合函数中,但无法解决,因为缺少列,sql,database,Sql,Database,我试图完成这个问题,但我收到一个“Column'DOG.DOB'在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”错误,但我被卡住了,因为没有年龄列,我对如何解决它感到困惑。下面是问题的答案,下面是所需的输出 使用子查询,创建一个查询,该查询将显示比所有狗的平均年龄大的狗。在输出中包括狗的名字和年龄。由于数据库不存储狗的年龄,您需要计算它。有许多函数可以帮助您找到两个日期之间的差异。要获取当前系统日期,请使用getdate()函数。根据狗的年龄对输出进行排

我试图完成这个问题,但我收到一个“Column'DOG.DOB'在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”错误,但我被卡住了,因为没有年龄列,我对如何解决它感到困惑。下面是问题的答案,下面是所需的输出

使用子查询,创建一个查询,该查询将显示比所有狗的平均年龄大的狗。在输出中包括狗的名字和年龄。由于数据库不存储狗的年龄,您需要计算它。有许多函数可以帮助您找到两个日期之间的差异。要获取当前系统日期,请使用getdate()函数。根据狗的年龄对输出进行排序,首先显示年龄较大的狗。重命名您的列:Dog Name和Age。此查询将生成359行。前10行将如下所示:

Dog Name                Age
--------------- -----------
Rosina                   10
Floris                   10
Harlin                   10
Martina                  10
Roselin                  10
Rem                      10
Alie                     10
Roxane                   10
Nester                   10
Clair                    10
我的查询:

  select Name AS 'Dog Name', 
         DATEDIFF(year, getdate(), DOB) AS 'Age'
    from DOG
  having DATEDIFF(year, getdate(), DOB) > avg(DATEDIFF(year, getdate(), DOB))
order by AGE desc

平均值的计算需要在它自己的select语句中-这将形成问题中提到的子查询,例如

having DATEDIFF(year, getdate(), DOB) > (subquery returning the average age of all dogs)
应该用“where”代替“have”吗?