sql查询,通过使用不同的特性在一列中添加值来插入一个新列

wmvff8tz  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(409)

我有一个包含三列(a,b,c)的表,我需要通过使用列a和b的不同特性来创建一个新的列“d”。

a  b  c
1  p  2
1  p  3 
2  q  4
1  q  2
2  r  4
2  r  2
1  p  2

我需要下面的答案,其中d是a和b的唯一列的和

a b c d
1 p 2 7
1 p 3 7
2 q 4 4
1 q 2 2
2 r 4 6
2 r 2 6
1 p 2 7

d列的结果是,
对于distinct(a和b),则添加c的值。然后在d列中插入值(匹配不同的值)

mpgws1up

mpgws1up1#

你可以试着用 SUM 以及
group by a 以及 b 子查询中的列,然后是self join 测试DLL

create table t(
   a int,
   b varchar(5),
   c int
);

insert into t values (1,'p',2);
insert into t values (1,'p',3);
insert into t values (2,'q',4);
insert into t values (1,'q',2);
insert into t values (2,'r',4);
insert into t values (2,'r',2);
insert into t values (1,'p',2);

查询

SELECT t1.*,t2.d 
FROM T t1 INNER JOIN (
    SELECT a,b,SUM(c) d
    FROM T
    GROUP BY a,b
) t2 on t1.a = t2.a and t1.b=t2.b

[结果]:

| a | b | c | d |
|---|---|---|---|
| 1 | p | 2 | 7 |
| 1 | p | 3 | 7 |
| 2 | q | 4 | 4 |
| 1 | q | 2 | 2 |
| 2 | r | 4 | 6 |
| 2 | r | 2 | 6 |
| 1 | p | 2 | 7 |

sqlfiddle公司

tzdcorbm

tzdcorbm2#

使用 case when 如果生成的值是常量,则创建另一列

select a,b,c, case when a=1  and b='p'  then 7
    when a=2 and b='q' then 4
    when a=2 and b='r' then 6
    when a=1 and b='q' then 2 else '' end as d from
    your_table

但在我看来,你需要a,b的群和作为第四列,所以你可以做如下的事情

select t1.a,t1.b,t1.c,t2.d from yourtable t1
inner join
(select a,b ,sum(c) as d from your table group by a,b) as t2
on t1.a=t2.a and t1.b=t2.b
quhf5bfb

quhf5bfb3#

如果支持sum的窗口函数

select a, b, c, sum(c) over (partition by a, b) as d
from yourtable

相关问题