返回聚合和非聚合结果的SQL查询
发布时间:2020-12-14 04:59:23 所属栏目:百科 来源:网络整理
导读:我需要编写一个返回表中聚合和非聚合数据的查询. 下面的例子应该有助于澄清我正在尝试做的事情.我有以下(简化)表格如下: CREATE TABLE course_group_def ( id PRIMARY SERIAL KEY,name TEXT NOT NULL );CREATE TABLE student ( id PRIMARY SERIAL KEY,grp_i
我需要编写一个返回表中聚合和非聚合数据的查询.
下面的例子应该有助于澄清我正在尝试做的事情.我有以下(简化)表格如下: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |