加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL聚合数组

发布时间:2020-12-13 16:44:59 所属栏目:百科 来源:网络整理
导读:嗨,我有两张桌子 Student--------Id Name1 John 2 David3 WillGrade---------Student_id Mark1 A2 B2 B+3 C3 A 是否可以使本机PostgreSQL选择获得这样的结果: Name Array of marks-----------------------'John',{'A'}'David',{'B','B+'}'Will',{'C','A'}
嗨,我有两张桌子
Student
--------
Id  Name
1   John    
2   David
3   Will

Grade
---------
Student_id  Mark
1           A
2           B
2           B+
3           C
3           A

是否可以使本机PostgreSQL选择获得这样的结果:

Name    Array of marks
-----------------------
'John',{'A'}
'David',{'B','B+'}
'Will',{'C','A'}

但不是这样

Name    Mark
----------------
'John','A'
'David','B'
'David','B+'
'Will','C'
'Will','A'
使用array_agg: http://www.sqlfiddle.com/#!1/5099e/1
SELECT s.name,array_agg(g.Mark) as marks        
FROM student s
LEFT JOIN Grade g ON g.Student_id = s.Id
GROUP BY s.Id

顺便说一句,如果你使用Postgres 9.1,你的don’t need to repeat列的SELECT到GROUP BY,例如。您不需要在GROUP BY上重复学生姓名。您只能在主键上GROUP BY。如果删除学生的主键,则需要在GROUP BY上重复学生姓名。

CREATE TABLE grade
    (Student_id int,Mark varchar(2));

INSERT INTO grade
    (Student_id,Mark)
VALUES
    (1,'A'),(2,'B'),'B+'),(3,'C'),'A');


CREATE TABLE student
    (Id int primary key,Name varchar(5));

INSERT INTO student
    (Id,Name)
VALUES
    (1,'John'),'David'),'Will');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读