Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 返回表示邮政编码比平均值热的天数的行_Sql_Oracle_Group By_Average_Aggregate Functions - Fatal编程技术网

Sql 返回表示邮政编码比平均值热的天数的行

Sql 返回表示邮政编码比平均值热的天数的行,sql,oracle,group-by,average,aggregate-functions,Sql,Oracle,Group By,Average,Aggregate Functions,请查看随附的问题图片以及相应的数据表和输出示例 您可以通过使用嵌套SQL和AVG group函数以及左外部联接来解决此问题: 这是一个使用解析函数的解决方案 select zip_code, measurement_date, noon_temp from ( select zip_code, measurement_date, noon_temp, avg(noon_temp) over (partition by zip_code) as

请查看随附的问题图片以及相应的数据表和输出示例


您可以通过使用嵌套SQL和AVG group函数以及左外部联接来解决此问题:


这是一个使用解析函数的解决方案

select zip_code, measurement_date, noon_temp
from   (
         select zip_code, measurement_date, noon_temp,
                avg(noon_temp) over (partition by zip_code) as avg_temp
       )
where  noon_temp > avg_temp
;
如果需要,在末尾添加ORDERBY子句

较旧的方法是使用聚合子查询,一次性处理整个输入表,并生成每个邮政编码的平均温度。然后,主查询再次读取主表,它通过邮政编码连接到此聚合子查询,并输出所需的行。所以基表被读取两次,我们也有一个连接。其他方法,如相关子查询,将需要更多的工作,但优化器足够聪明,可以将它们转换为联接


专门针对此类问题引入了分析函数,以减少所需的工作量。按邮政编码计算平均温度的方法基本相同,即按邮政编码进行分区或分组,将其附加到输入中的每一行,然后外部查询中的where子句比较子查询输出的同一行中的两个值。无需再次读取基础数据,也无需连接。

请将数据以格式化文本形式发布。还有,到目前为止你都尝试了什么?当你发布一个家庭作业问题时,你应该始终:1展示你尝试了什么,以及你在哪里遇到了困难;2说明你所处的学习水平。例如,针对这类问题,为了避免两次读取数据和不必要的连接,引入了SQL标准,Oracle实现了分析函数。但是,如果你没有在课堂上了解它们,我怀疑老师会希望你在作业中使用它们,毫无疑问,证明你不是自己做的。所以-你需要说明你的班级水平。@mathguy,我很感激你的评论,是的,我同意你的看法。如果你看看我以前的问题,我总是在向任何人寻求帮助之前提交一个我想到的例子。你在截图中看到的输出实际上是由我导出的。然而问题是,我没有使用SQL来给出这个答案,需要一个复习。我对这个查询有一个想法,但是我希望通过发布我的想法并直截了当地说出来,不会让任何人感到困惑。无论哪种方式,您的意见是感激的。谢谢。@ace123-好的,谢谢你的澄清。不过,即使在你回答之后,仍然不清楚分析函数是否在你的范围内。@mathguy,是的,分析函数在我的范围内。我不能说我在SQL中经常使用它们,因为我目前的SQL知识处于基本水平,但是我发现我自己主要在Excel中使用这些分析函数,这就是我如何能够根据问题和Access中提供的数据导出输出的方法。TEMP的平均值是1216666。。。。听起来屏幕截图也错了。。。你的问题包括一个也有12个的人。选择*FROM zip_temps,其中noon_temp>SELECT AVGnoon_temp FROM zip_temps@Stv Notice OP告诉我们,对于邮政编码而言,温度高于平均值。平均是13333。。。对于邮政编码22043,11对于邮政编码22046ha是的,很抱歉错误,没有仔细阅读zipcode提出的问题,请原谅。@Stv没有问题朋友:根据您的评论,我是否正确地假设您的查询将首先对邮政编码进行分组,然后根据邮政编码计算平均温度?如果是这样的话,我认为这在这种情况下是行不通的,因为这里的任务是编写一个查询,该查询将输出按邮政编码分组的高于平均水平的临时数据。例如,邮政编码22046的平均温度为11,22043为13。然而,当平均所有温度数据时,假设我们的平均温度为12。因此,根据操作的方法/顺序,输出会有很大的不同。@ace123-我从您最初的帖子中了解到的是:获取一个邮政编码,以及该邮政编码的不同日期。仅计算该邮政编码的平均温度。然后在输出中返回相同邮政编码的日期,其中温度也高于该邮政编码的平均值。输入表中具有不同邮政编码的行不会影响此计算。在您的示例中,将zip为22046的行与平均温度为11的行进行比较。zip为22043的行与平均温度13.33333进行比较。这不是您所需要的吗?要查看子查询生成的内容,然后了解主查询的功能,您可以单独运行子查询并检查其输出。这将帮助您了解分析函数的作用-主要功能是,它将平均值的副本附加到同一zip co的每个输入行 这就是为什么不需要再次读取基表,也不需要联接。每行都有自己的温度和相同邮政编码的平均温度,但在不同的日期平均。
select zip_code, measurement_date, noon_temp
from   (
         select zip_code, measurement_date, noon_temp,
                avg(noon_temp) over (partition by zip_code) as avg_temp
       )
where  noon_temp > avg_temp
;