Mysql SQL查询,通过使用不同功能在一列中添加值来插入新列

Mysql SQL查询,通过使用不同功能在一列中添加值来插入新列,mysql,sql,distinct-values,Mysql,Sql,Distinct Values,我的表有三列(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列中插入值(匹配不同的值)使用ca

我的表有三列(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列中插入值(匹配不同的值)

使用
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的群和作为第四列d,所以 你可以像下面这样做

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

您可以尝试在子查询中使用
SUM
groupby
a
b
列,然后使用self
join

TestDLL

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 |

如果支持SUM的窗口函数

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

你的DBM是什么?解释输出的逻辑,例如1+p=7是什么?非常感谢你。。另外,我可以问一下,是否可以对间隔为2的值求和。您的
间隔为2的意思是什么?你能给我举个例子吗?例如:一个b c d 1 p 2 5/1 p 3 5/1 p 4 6/1 p 2 6/类似的东西。以2的间隔为不同的值添加值您的dbms是什么?sql server还是mysql?我的dbms是mysql。你能详细解释一下吗。我是sql新手。是否可以添加不同间隔为2的值?我使用mysql 5。7@Sara如果你真的需要,间隔2。那我建议你再问一个问题。这是一个更棘手的要求。但这一次要确保用MySql标记这个问题。并提及版本。因为你不会想要只在MySql 8.x中工作的东西。