Mysql SQL查询,通过使用不同功能在一列中添加值来插入新列
我的表有三列(a、b、c),我需要使用a列和b列的不同特性创建一个新的列“d”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
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
列,然后使用selfjoin
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中工作的东西。