gpt4 book ai didi

sql - Postgresql 聚合数组

转载 作者:行者123 更新时间:2023-11-29 11:04:53 25 4
gpt4 key购买 nike

我有两个表

Student
--------
Id Name
1 John
2 David
3 Will

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

是否有可能使 native Postgresql SELECT 获得如下结果:

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'),
(2, 'B+'),
(3, 'C'),
(3, 'A');


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

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

关于sql - Postgresql 聚合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10928210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com