微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回聚合和非聚合结果的SQL查询

我需要编写一个返回表中聚合和非聚合数据的查询.

下面的例子应该有助于澄清我正在尝试做的事情.我有以下(简化)表格如下:

CREATE TABLE course_group_def (
          id        PRIMARY SERIAL KEY,name      TEXT NOT NULL
          );

CREATE TABLE student (
          id        PRIMARY SERIAL KEY,grp_id    INTEGER REFERENCES course_group_def(id) ON UPDATE CASCADE,name      TEXT NOT NULL,weight    float NOT NULL,height    float NOT NULL
          );

为了论证,我们假设每个学生都属于一个且唯一的课程组.我想编写一个返回结果集的查询,如下所示:

student.name,student.weight,weight_apgaw,weight_apgh

哪里:

weight_apgaw:是个别学生的体重,表示为他/她所属课程组平均体重的百分比.

weight_apgh:
是个别学生的体重,表示为他/她所属课程组平均身高的百分比

关于如何编写这样的查询,我不知道(有些想法).我的方法是编写两个查询,并以某种方式在两个表之间进行查找 – 但这种方法似乎是荒谬的,效率最低的.

有人可以建议我如何正确编写这样的sql函数吗?理想情况下,这应该是db不可知的.但是,我正在使用Postgresql 8.4,所以如果我必须在sql风格之间做出选择,那么这将优先.

解决方法

沿着这些方向的查询应该让你开始:

select s.name,s.weight,((s.weight/st.avgweight) * 100) as weight_apgaw,((s.height/st.avgheight) * 100) as weight_aphei
from student s 
join (
   select grp_id,avg(weight) as avgweight,avg(height) as avgheight
   from student
   group by grp_id
   ) st on s.grp_id = st.grp_id

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐