PostgreSQL聚合(分组、求和、最小值、最大值)能力练习
我有一个很好的练习,以某种方式聚合表,这不是一个熟悉的练习,我尝试使用分组、求和、最大、最小函数,但我找不到一个逻辑来组合所有: 举例如下:PostgreSQL聚合(分组、求和、最小值、最大值)能力练习,sql,database,postgresql,Sql,Database,Postgresql,我有一个很好的练习,以某种方式聚合表,这不是一个熟悉的练习,我尝试使用分组、求和、最大、最小函数,但我找不到一个逻辑来组合所有: 举例如下: db=# select * from test; id | t1 | t2 | a | b | c ----+----+----+---+---+---- 1 | 1 | 2 | x | y | 2 2 | 1 | 2 | y | x | 4 3 | 2 | 3 | x | y | 6 4 | 2 | 4 |
db=# select * from test;
id | t1 | t2 | a | b | c
----+----+----+---+---+----
1 | 1 | 2 | x | y | 2
2 | 1 | 2 | y | x | 4
3 | 2 | 3 | x | y | 6
4 | 2 | 4 | y | x | 8
5 | 3 | 4 | x | x | 10
6 | 4 | 5 | x | x | 12
7 | 4 | 7 | x | x | 14
本练习使用以下规则创建表test2:
选择具有相同参数a、b(即group列)的行
冗余值
将表相对于a、b分组后,输出列c
必须加以总结。
将表相对于a、b分组后,输出列t1
必须选择最小值。
将表相对于a、b分组后,输出列t2
必须选择最大值。
输出test2将从测试中选择,如下所示
db=# select * from test2;
id | t1 | t2 | a | b | c
----+----+----+---+---+----
1 | 1 | 3 | x | y | 6
2 | 1 | 4 | y | x | 12
5 | 3 | 7 | x | x | 36
为便于参考,该表创建如下:
create table test (id BIGSERIAL PRIMARY KEY,t1 int4,t2 int4, a text, b text ,c INT64_UNSIGNED);
insert into test values (1,1,2,'x','y',2);
insert into test values (2,1,2,'y','x',4);
insert into test values (3,2,3,'x','y',6);
insert into test values (4,2,4,'y','x',8);
insert into test values (5,3,4,'x','x',10);
insert into test values (6,4,5,'x','x',12);
insert into test values (7,4,7,'x','x',140;
要在SQL server中创建表,请执行以下操作-
CREATE TABLE [dbo].[test](
[id] [int] NULL,
[t1] [int] NULL,
[t2] [int] NULL,
[a] [varchar](50) NULL,
[b] [varchar](50) NULL,
[c] [int] NULL
) ON [PRIMARY]
这是你的问题
胜任训练的解决方案
select MIN(id) as id,
MIN(t1) as t1,
Max(t2) as t2,
a,
b,
sum(c) as c
from dbo.test
group by a,b order by id
id | t1 | t2 | a | b | c--+--+--+--1 | 1 | 3 | x | y | 8 2 | 1 | 4 | y | 12 5 | 3 | 7 | x | x | 36为什么要将Postgres放在标题中,用mysql标记问题,然后给出SQL Server特定的非标准DDL语句?这令人困惑。你真正使用的是哪种数据库管理系统?这个地方变得越来越懒…:所有那些为我做作业的线程突然出现。。。